虚函数概念:
- 在类的定义中,前面有virtual关键字的成员函数就是虚函数。
- virtual关键字只用在类定义里的函数声明中,写函数体时不用。
- 构造函数和静态成员函数不能是虚函数。
多态的表现形式:
1) 派生类的指针可以赋给基类指针。
通过基类指针可以调用基类和派生类中的同名虚函数时:指针指向哪个类的对象,就调用哪个类的虚函数。
2) 派生类的对象可以赋给基类引用
通过基类引用调用基类和派生类中的同名虚函数时:引用的哪个类的对象,就调用哪个类的虚函数。
- 这两种机制都叫“多态”
- 另:除了上述机制外,虚函数与一般成员函数无区别,也可在其中调用所处类中任何一个变量和函数
例:
1 #include<iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 int n = 0; 7 virtual void Func(); 8 A() {} 9 }; 10 void A::Func() { 11 cout << "A::Func" << n << endl; 12 } 13 class B:public A 14 { 15 public: 16 int n = 1; 17 virtual void Func() { 18 func(); 19 cout << "B::Func" << A::n << endl; 20 } 21 void func() { 22 cout << "B::func" << n << endl; 23 } 24 }; 25 int main() 26 { 27 B b; 28 A a; 29 A & n = b; //基类引用,引用派生类对象 30 A *p = &a; //基类指针,指向基类对象 31 p->Func(); //调用基类的Func() 32 p = &b; //指向派生类对象 33 n.Func(); //调用派生类的Func() 34 p->Func(); //调用派生类的Func() 35 return 0; 36 }