当继承类把基类以private来继承的时候 为什么动态绑定失效?

来源:百度知道 编辑:UC知道 时间:2024/06/25 20:30:34
class A
{
protected:
int a;
public:
A(int _a=0):a(_a){}
virtual display()
{cout<<"A"<<endl;}
};
class B:private A
{
protected:
int b;
B(int _a=0,int _b=0):a(_a),b(_b){}
void display()
{cout<<"B"<<endl;}
};

B b;
A &temp=b;
temp.display();//为何出错?
};
class A
{
protected:
int a;
public:
A(int _a=0):a(_a){}
virtual void display()
{cout<<"A"<<endl;}
};
class B:private A
{
protected:
int b;
public:
B(int _a=0,int _b=0):A(_a),b(_b){}
void display()
{cout<<"B"<<endl;}
};

B b;
//回a409984776 A &temp= *b 这样的话报 非法的间接寻址
A &temp= b;//“类型转换”: 从“main::B *”到“main::A &”的转换存在,但无法访问
/*我知道private方式继承的话基类的public会变成继承类的private。 我想知道的是为什么virtual

不好意思! 为什么会错 我还是不知道! 但是你说的那个问题应该是这样的,因为你是私有继承的,所以那个主函数中虚函数也便成私有的,所以不能实现动态绑定!

private继承时,父类的public成员将作为子类的private成员,当然访问不到。
先把三种继承方式的区别搞清楚吧,别乱用。