首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

父类指针访问子类对象的成员(普通继承,不用虚函数)解决方案

2012-03-09 
父类指针访问子类对象的成员(普通继承,不用虚函数)请问父类指针访问子类对象的成员(普通继承,不用虚函数)

父类指针访问子类对象的成员(普通继承,不用虚函数)
请问父类指针访问子类对象的成员(普通继承,不用虚函数)的方法?
例如: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();
[解决办法]
好帖!

热点排行