一些小问题

问1:子类继承了父类的所有成员,对吗?

答1:错,至少子类没有继承父类的构造函数(析构函数不知有没有继承,但复制构造函数肯定是继承了)。

class A
{
    public:
    A(){}
    A(int x){}
    A(const A& a){cout << "Copy Constructor" << endl;}
    A& operator=(const A& a){cout << "=" << endl;}
};

class B: public A{};

int main()
{
    A a(10);
    B b;        //ok b调用了自己的构造函数,再调用了A的空构造函数
    //B b(10);    //error b没有该构造函数(说明B不会继承A的构造函数)
    
    A a2 = a;    //ok 输出Copy Constructor
    B b2 = b;    //ok 输出Copy Constructor,B继承了A的赋值构造函数,但只是部分复制(B中特有的成员不能被复制)
    
    A a3;
    a3 = a2;     //ok 输出= 
    B b3;
    b3 = b2;    //ok 输出= B继承了A的operator=赋值函数    
}
View Code

 

问2:父类指针指向子类对象,通过该指针能够调用子类特有(父类没有)的函数吗?

答2:不能,见下例。

#include <iostream>
using namespace std;

class A{};

class B:public A
{
    void hello()
    {
        cout << "Hello" << endl;
    }
};

int main()
{
    B b;
    
    A* a = &b;    //父类指针指向子类对象 
    
    a->hello();    //编译失败 
}
View Code

 

问3:问2的基础上,若该函数在父类中也声明了,通过该指针能够调用子类特有(父类也有,但函数体不一样)的函数吗?若不能怎么才能做到?

答3:不能,没有虚函数的话,父类指针只能调用父类自己的函数,如果要调用同名的子类函数,则应该将父类的函数声明为虚函数。

posted @ 2014-06-06 21:19  Norcy  阅读(229)  评论(0编辑  收藏  举报