概念
多态:不同对象进行相同操作或行为而产生的不同的结果或状态
虚函数
虚函数是定义在基类中的函数,派生类必须对其进行覆盖,在类中声明虚函数的格式如下:
virtual void my_virtual_func();
虚函数是多态的基础,有虚函数才能构成多态
构成多态的条件
1.必须存在继承关系
2.继承关系中必须有同名的虚函数,并且是覆盖关系
3.存在基类的指针,通过该指针调用虚函数
namespace virtual_func_demo { class Base { public: virtual void func1();//virtual关键字只需要体现在父类中 virtual void func1(int); }; void Base::func1() { cout << "void Base::func1" << endl; } void Base::func1(int) { cout << "void Base::func1(int)" << endl; } class pais:public Base { public: void func1(); void func1(int); //void func1(char *str); }; void pais::func1() { cout << "void pais::func1()" << endl; } void pais::func1(int) { cout << "void pais::func1(int)" << endl; } //向派生类增加新的成员时会报错 //void pais::func1(char *str) { // cout << "compile error " << endl; //} } void main() { virtual_func_demo:: Base base; base.func1(); base.func1(2); virtual_func_demo::pais pp; pp.func1(); pp.func1(8); system("pause"); return; }
注意:多态中不能新增基类中没有的成员
纯虚函数
在基类中不能对虚函数给出有意义的实现,但又要便于派生类中重新定义该函数,此时可以使用虚函数
namespace pure_virtual_func { class hi { public: virtual void my_pure_func() = 0; }; }
=0告诉编译器该虚函数是纯虚函数,在基类中没有具体实现