读书人

父类指针访问子类对象的成员(普通继承

发布时间: 2012-03-09 21:42:54 作者: rapoo

父类指针访问子类对象的成员(普通继承,不用虚函数)
请问父类指针访问子类对象的成员(普通继承,不用虚函数)的方法?
例如:class A{
};
class B:public A{
public:
void output()
{
}
}
请问要怎样处理才能让
A *pA= new B;
pA-> output();//使这个操作合法。
欢迎讨论,和提意见。
谢谢大家。



[解决办法]
B * pB = dynamic_cast <B *> pA;

if (pB != 0)
pB-> outpub();
[解决办法]
B * pB = dynamic_cast <B *> (pA);

if (pB != 0)
pB-> outpub();

[解决办法]
如果你的父类里一个虚函数都没有的话,就只好B * pB = (B *)(pA);
[解决办法]
如果允许类被派生,那么至少析构函数应该是虚函数。这样才能保证派生类能够正确释放资源。
[解决办法]
没有虚函数的话,直接强制转化.无需动态识别

如果允许类被派生,那么至少析构函数应该是虚函数。这样才能保证派生类能够正确释放资源。
错误,假如基类的析构函数是保护的呢?
[解决办法]
不行的,不用虚函数,
即使进行了强制类型转换,
也只能通过基类
指针访问派生类的基类部分成员,
它是不能够访问派生类的非虚成员函数的
[解决办法]
C++里面是可以直接将基类的指针强制转化为子类的指针的。
A *pA= new B;
((B*)pA)-> output();
就可以了。
甚至于
A *pA = new A;
((B*)pA)-> output();
也不会出错,只要B::output没有访问只有B中才存在的数据就没有问题。
[解决办法]
没有虚函数机制,
要实现这个,
只能用类型强制转换 ~~
[解决办法]
B * pB = dynamic_cast <B *> (pA);

如果转换正确,
则可以使用 pB调用output方法。
[解决办法]
B * pB = dynamic_cast <B *> (pA);

if (pB != 0)
pB-> outpub();
[解决办法]
好帖!

读书人网 >C++

热点推荐