20180103牛客网刷题

今天这题出现了很多看不懂的,慢慢看吧

收了几个c++的题

 

1.对下面的程序段


 

编译运行后,程序输出结果是()

  • CB::f1() CC::f2()
  • CB::f1() CB::f2()
  • CB::f1() CA::f2()
  • CA::f1() CC::f2()

上边代码大约是酱紫的:

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 class CA {
 6 public:
 7     virtual void f1 () {
 8         cout << "CA::f1()" << endl;
 9         f2();
10     }
11     void f2 () {
12         cout << "CA::f2()" << endl;
13     }
14 };
15 class CB : public CA {
16 public:
17     void f1 () {
18         cout << "CB::f1()" << endl;
19         f2();
20     }
21     void f2 () {
22         cout << "CB::f2()" << endl;
23     }
24 };
25 class CC : public CB {
26 public:
27     virtual void f2 () {
28         cout << "CC:f2()" << endl;
29     }
30 };
31 int main (void) {
32     CC c;
33     CA *pa = &c;
34     pa -> f1();
35     return 0;
36 }

某大牛的解题:

CA* pa = &c;这句话是父类指针指向子类对象,调用pa->f1()时,因为父类中的f1()是虚函数,所以将发生动态绑定,调用子类CB中的f1()函数,先输出CB::f1()
在CB类的f1()函数中,调用非虚函数f2(),但因为其父类CA中的f2()函数并不是virtual函数,所以将调用CB类中的f2()函数,输出CB::f2()。如果将CA类中的f2()改成虚函数,那么将输出CC::f2();如果将CB类中的f2()改成虚函数,也将输出CC::f2(),这是满足动态绑定的。
 
c++继承的坑还是挺大的,心累

 

posted @ 2018-01-03 20:45  ijrys  阅读(292)  评论(0编辑  收藏  举报