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

类型转换的不解

2013-01-22 
类型转换的疑惑先看下面的代码#include iostreamusing namespace stdclass A{public :void find(){cout

类型转换的疑惑
先看下面的代码


#include <iostream>
using namespace std;

class A
{
public :
    void find()
    {
        cout << "find::A" << endl;
    }

    virtual void get()
    {
        cout << "get::A" << endl;
    }
};

class B:public A
{
public:
    virtual void find()
    {
        cout<< "find::B" << endl;
    }

    void get()
    {
        cout << "get::B" << endl;
    }
};

int main()
{
    A *a_1 = new B();
    a_1->find();
    A *a_2 = new B();
    a_2->get();
    return 0;
}

输出为:
find::A
get::B
a_1和a_2同样是做了转换,为什么输出的不同呢?
a_1是输出类A中的函数而a_2是输出类B中的函数。
在这里我想知道a_1和a_2在被转换为指向类A的指针后,它接下来是如何判断是执行类A的函数还是类B的函数。
如果做这样的解释:
首先a_1会去类A中查找find()函数,它发现类A中的find()函数不是虚函数,就直接调用类A中的函数find()函数
可是这样无法解释a_2调用类B中的get()函数啊?
求大牛指点一二,本人困惑已久。

[解决办法]
有虚函数class都有一个虚函数表。非虚函数优先
[解决办法]
在子类中定义父类中的非virtual方法,会破坏它的多态性,而且并不会去重写父类中的非virtual!
第二明显是多态性,方法是会被重写。

热点排行