C++基类到派生子类的强制转换问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 15:58:49
假如有如下关系:
class a{};
class b:public a
{
private: int x;
public: b(); int method1()const{return x;}
};
class c:public b
{
private: char ar[10];
public:c(); const char * method2(){return ar;}
};

b obj1;
b * pb = & obj1;
c * pc;
pc = dynamic_cast <c*> (pb);
pc-> method2(); // pc可以调用method2方法么?????

这种基类到子类的向下转换是怎么执行的??比如说子类对象里有基类对象没有的char 型私有成员以及method2()方法。。在向下转换的时候。会自动生成这些成员?
还是说忽略这些成员?

你的pc是c类型的对象的指针啊,当然可以调用c类型的method2()方法。
公用继承的话,基类成员的公用的和保护的,全能以原方式继承下来,基类私有的,没有被继承。
保护继承的话,基类成员的公用的和保护的,全以保护方式继承下来,基类私有的,没有被继承。
私有继承的话,基类成员的公用和保护的,全以私有方式被继承下来,
基类私有的,没有被继承。
而对于方问权限,只有继承后,仍是公用的,在外部里也可以通过类似
xx.xx()这种方式来调用方法。私有的,和保护的,只能通过类里面的其它成员函数来访问。
私有的,和保护的方式的区别就是,
基类成员是保护的,可以被继承到派生类中,
如果是基类的私有成员,不能被继承。