您的位置:首页 > 编程语言 > C语言/C++

C++ Primer — const小问题

2013-11-09 22:02 155 查看
#include <iostream>
using namespace std;

class Base
{
public:
virtual void display() const
{
cout << "Base class !" << endl;
}
virtual ~Base(){}
};

class Derive: public Base
{
public:
virtual void display()
{
cout << "Derive class !"<< endl;
}
virtual ~Derive(){}
};

int main()
{
Base* pBase = new Derive();
Derive* pDerive = new Derive();
pBase->display();
pDerive->display();
delete pBase;
delete pDerive;
//const Derive d;
//d.display();//编译错误
return 0;}


该程序会输出:Base class和Derive class。但是如果在子类成员函数加上const的话,输出为2个Derive class。还可以父类不加const,子类加const等。

注解:基类和派生类的display函数一个带const,一个不带const,虽然基类中disppaly()函数为虚函数,但是派生类中的dispaly()函数没有const修饰,也就是说派生类中的display()函数,并不是对基类中display()函数的重新定义,派生类中有2个版本的display()函数,一个是继承基类的,一个是自己的,我们不能通过Derive的对象(引用或指针)调用从Base继承的虚函数,因为该函数被Derive中的display()定义屏蔽了,pBase是基类类型的指针,它指向派生类,当调用display()函数时,这是不会发生动态绑定,编译器将在基类中查找该函数,而忽略派生类;若将派生类中的dispay()函数加上const修饰,即对display()函数进行重定义,则当通过基类类型的指针调用dispaly()函数时,此时发生动态绑定,会根据基类类型的指针实际指向的对象来调用相应的函数,故此时会输出2个Derive
class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: