虚函数概念:

  • 在类的定义中,前面有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 }

 

 

 

posted on 2018-04-03 21:43  宵夜在哪  阅读(138)  评论(0编辑  收藏  举报