代码改变世界

C++ 中的virtual关键字

2016-09-21 09:10  雄风狂飙  阅读(174)  评论(0)    收藏  举报

在一个公司混迹多年,才发现自己的编码水平低下不少,近来想提升一下,重翻C++primer,重拾virtual用法。

经典中如是对virtual进行解释并展开后续讨论:

1.只有virtual成员可以进行动态绑定;

2.必须通过基类的引用或者指针调用。

验证代码如下:

#include <iostream>
#include <string>

using namespace std;


class Base{
    
private:

public:
	Base(){
	    cout<<"base constructor!"<<endl;
	}

	~Base(){}

	virtual void virtualfunction()
	{
	    cout<<"Base virtual function"<<endl;
	}

	void function()
	{
	    cout<<"Base function"<<endl;
	}



};

class inheBase:public Base{
private:

public:

    inheBase(){ 
	    cout<<"inherit constructor!"<<endl;
	}
	~inheBase(){}
	void virtualfunction()
	{
	    cout<<"inherit virtual function"<<endl;
	}

	void function()
	{
	    cout<<"inherit Base function"<<endl;
	}
};


int main(int argc, char* argv[])
{
	
	Base b;
    inheBase inB;

	b = inB;

	b.virtualfunction();

	b.function();

	Base *bt = NULL;
	bt = &inB;

	bt->virtualfunction();
	bt->function();

	bt->Base::virtualfunction();
	
	return 0;
}

  结果如下:

结果清楚,无需多言。