标签:
#include<iostream> #include<string> using namespace std; class Base { public: Base(){} ~Base(){} public: virtual void f1(int x){ cout << "baseclass: f1() " << x << endl; } virtual void f2()final{ cout << "baseclass: f2() " << endl; } void f3(int x){ cout << "baseclass : f3() " <<x<< endl; } virtual void f4(){ cout << "baseclass:f4()" << endl; } //string isbn()const; //virtual double net_price(size_t n)const final; }; class Derive:public Base { public: Derive(){} ~Derive(){} public: //与基类的virtual函数同名不同參数的是重载函数,不能加上override,能够加virtual void f1(double x){ cout << "double derive class :f1()" << x << endl; } //与基类的virtual函数同名同參数的是覆盖函数,能够加virtual,override void f1(int x)override{ cout << "int derived class :f1()" << x << endl; } //基类的f2()加了final,于是去掉凝视出错 //void f2()override{ cout << "override derived class: f2() " << endl; } //可是奇怪的来了,与基类的非virtual函数同名同參数的是居然也是覆盖函数! //假设去掉凝视则会输出“"derive class: f3()” //我觉得应该产生编译错误,可是却没有 //void f3(int x){ cout << "derive class: f3() " <<x << endl; } //我们看f4()没有不论什么问题,由于baseclass中声明是virtual,在派生类中会自己主动把f4()变为virtual void f4(){ cout << "derive class :f4() " << endl; } }; int main() { Base* pBase = new Base(); pBase->f1(1); pBase->f2(); pBase->f3(3); pBase->f4(); cout << endl; Derive* pDerive = new Derive(); pDerive->f1(2.0); pDerive->f1(2); //pDerive->f2(); pDerive->f3(3); pDerive->f4(); cout << endl; return 0; }问题我已经自己解决,原来与virtual函数无关,仅仅是名字冲突与继承的问题。派生类的成员会隐藏同名的基类成员。
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/4276022.html