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

懂得虚基类、虚函数与纯虚函数的概念(转载)

2013-11-29 
理解虚基类、虚函数与纯虚函数的概念(转载)class?A{public:????int?iValue}class?B:public?A{public:????

理解虚基类、虚函数与纯虚函数的概念(转载)
class?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)????int?iValue;
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?B:public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?bPrintf(){cout<<"This?is?class?B"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?C:public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?cPrintf(){cout<<"This?is?class?C"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?D:public?B,public?C
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?dPrintf(){cout<<"This?is?class?D"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)void?main()
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)????D?d;
懂得虚基类、虚函数与纯虚函数的概念(转载)????cout<<d.iValue<<endl;?//错误,不明确的访问
懂得虚基类、虚函数与纯虚函数的概念(转载)????cout<<d????cout<<d????cout<<d}

从代码中可以看出类B C都继承了类A的iValue成员,因此类B C都有一个成员变量iValue ,而类D又继承了B C,这样类D就有一个重名的成员 iValue(一个是从类B中继承过来的,一个是从类C中继承过来的)class?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)????int?iValue;
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?B:virtual?public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?bPrintf(){cout<<"This?is?class?B"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?C:virtual?public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?cPrintf(){cout<<"This?is?class?C"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?D:public?B,public?C
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?dPrintf(){cout<<"This?is?class?D"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)void?main()
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)????D?d;
懂得虚基类、虚函数与纯虚函数的概念(转载)????cout<<d.iValue<<endl;?//正确
懂得虚基类、虚函数与纯虚函数的概念(转载)}

在继承的类的前面加上virtual关键字表示被继承的类是一个虚基类,它的被继承成员在派生类中只保留一个实例class?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?funPrint(){cout<<"funPrint?of?class?A"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?B:public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????void?funPrint(){cout<<"funPrint?of?class?B"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)void?main()
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)????A?*p;?//定义基类的指针
懂得虚基类、虚函数与纯虚函数的概念(转载)????A?a;
懂得虚基类、虚函数与纯虚函数的概念(转载)????B?b;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p=&a;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p->funPrint();
懂得虚基类、虚函数与纯虚函数的概念(转载)????p=&b;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p->funPrint();
懂得虚基类、虚函数与纯虚函数的概念(转载)}

大家以为这段代码的输出结果是什么?有的人可能会马上回答funPrint of class A 与 funPrint of class B 因为第一次输出是引用类A的实 例啊,第二次输出是引用类B的实例啊class?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????virtual?void?funPrint(){cout<<"funPrint?of?class?A"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?B:public?A
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????virtual?void?funPrint(){cout<<"funPrint?of?class?B"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)void?main()
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)????A?*p;?//定义基类的指针
懂得虚基类、虚函数与纯虚函数的概念(转载)????A?a;
懂得虚基类、虚函数与纯虚函数的概念(转载)????B?b;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p=&a;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p->funPrint();
懂得虚基类、虚函数与纯虚函数的概念(转载)????p=&b;
懂得虚基类、虚函数与纯虚函数的概念(转载)????p->funPrint();
懂得虚基类、虚函数与纯虚函数的概念(转载)}

在基类的成员函数前加virtual关键字表示这个函数是一个虚函数,所谓虚函数就是在编译的时候不确定要调用哪个函数,而是动态决定将要调 用哪个函数,要实现虚函数必须派生类的函数名与基类相同,参数名参数类型等也要与基类相同class?Vehicle
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)????virtual?void?PrintTyre()=0;?//纯虚函数是这样定义的
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?Camion:public?Vehicle
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????virtual?void?PrintTyre(){cout<<"Camion?tyre?four"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)class?Bike:public?Vehicle
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)public:
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载)????virtual?void?PrintTyre(){cout<<"Bike?tyre?two"<<endl;};
懂得虚基类、虚函数与纯虚函数的概念(转载)};
懂得虚基类、虚函数与纯虚函数的概念(转载)
懂得虚基类、虚函数与纯虚函数的概念(转载)void?main()
懂得虚基类、虚函数与纯虚函数的概念(转载)懂得虚基类、虚函数与纯虚函数的概念(转载){
懂得虚基类、虚函数与纯虚函数的概念(转载)????Camion?c;
懂得虚基类、虚函数与纯虚函数的概念(转载)????Bike?b;
懂得虚基类、虚函数与纯虚函数的概念(转载)????b.PrintTyre();
懂得虚基类、虚函数与纯虚函数的概念(转载)????c.PrintTyre();
懂得虚基类、虚函数与纯虚函数的概念(转载)}

如上代码,定义了一个交通工具类(Vehicle),类中有一函数可打印出交通工具的轮胎个数,但交通工具很多轮胎个数自然也就不确定,所以 就把它定义为纯虚函数,也就是光定义函数名不去实现它,类Camion继承了Vehicle并实现了里面的代码,打印出有4个轮胎。?
????3, 纯虚函数不能实化化,但可以声明指针。

热点排行