虚函数的函数定义问题
.
class Myclass { public: virtual int FuncX(); virtual int FuncY(); }; int main() { Myclass obj; // 编译报错 cout << "hello" << endl; return 0; }
class Myclass { public: int FuncX(); int FuncY(); }; int main() { Myclass obj; cout << "hello " << endl; return 0; }
结论:
只要一个类拥有虚函数,当定义该类对象时,就必须实现其全部的虚函数定义。
若一个类只有非virtual的成员函数(没有虚函数),当定义该类对象时,可以不必实现该类的成员函数的定义,只在类中进行成员函数的声明也是允许的。
类似的一个实验:
class Fatherclass { public: virtual int FuncX(); virtual int FuncY(); }; class Son : public Fatherclass { public: };
int main() { cout << "hello Fatherclass " << endl; Son sonobj; return 0; }
结论: 如果一个含有虚函数的类作为父类,当定义其派生类的对象的时候,需要实现该父类中全部的虚函数的定义。
由于继承关系导致的虚函数的例子:
class Fatherclass { public: virtual int FuncX(); virtual int FuncY(); }; int Fatherclass::FuncX() { return 0; } int Fatherclass::FuncY() { return 0; } class son : public Fatherclass { public: int FuncX(); // 这里需要实现son类内部全部的虚函数定义。( 此处只有一个FuncX ) }; #if 1 int son::FuncX() { return 0; } #endif int main() { Fatherclass obj; son objson; // 编译报错 cout << "hello " << endl; return 0; }
结论:
由于继承关系,导致子类son的FuncX也是虚函数,所以就必须实现子类的FuncX的函数定义,而不能仅仅是在类中进行函数声明。
.
/************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/