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

基类指针该怎么调用基类没有而派生类有的方法

2013-04-09 
基类指针该如何调用基类没有而派生类有的方法 ①如果一个函数在基类中没有(没有定义的必要),而派生类必须有

基类指针该如何调用基类没有而派生类有的方法
 ①如果一个函数在基类中没有(没有定义的必要),而派生类必须有。这种情况下该如何声明这两个类才能让基类指针调用派生类的该方法呢?
我想可以用纯虚函数,这样基类的方法就可以不必定义了,但是这又会导致基类对象不能使用,难道必须在基类也定义一个这样的虚函数吗?那岂不是两者要差不多数量的函数声明?

②基类析构函数是虚拟的,但是基类和派生类中的析构函数名字不一样,调用析构函数时也能按正常顺序,难道虚函数调用不关心函数名
[解决办法]


class A
{

};

class B :public A
{
public:
     void test(){cout<<"test"<<endl;}
};
int main()
{
    A a;
    B *b = (B*)&a;
    b->test();//这样是可以的、我试过 但是不知为什么! 我也这样用过 行不行 最近还没找到答案
    return 0;
}

[解决办法]
将基类指针dynamic_cast成你派生类的指针,然后再调用你派生类有而基类没有的方法
[解决办法]
1、如果想要实例化基类对象,那就只能定义一个空的函数,纯虚函数无法实例化。

2、析构函数的工作方式是:最底层的派生类(most derived class)的析构函数最先被调用,然后调用每一个基类的析构函数。
[解决办法]
1、虚函数本身就是一个多态的接口,如果基类真的没有必要实现该函数,又不希望定义成纯虚,最简单的方法就是给基类写个空函数。但是我认为既然基类如此不需要该函数,不写也罢,在调用的时候用dynamic_cast把基类指针强制转换为派生类指针来调用该多态接口,显然更不会造成误会。

2、不用纠结这个,析构函数的处理是特别的,调用一般的虚函数肯定是关心函数签名的

热点排行