zoukankan      html  css  js  c++  java
  • 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++继承的坑还是挺大的,心累
  • 相关阅读:
    Makefile 文件格式
    带你深入理解传递參数
    LeetCode OJ Basic Calculator II
    emacs 为什么找不到运行程序?
    iOS Dev (51)加急审核
    POJ 1159 Palindrome
    9.9递归和动态规划(十二)——小鸡吃米
    c++操作当前窗体句柄
    [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑
    静态代理模式
  • 原文地址:https://www.cnblogs.com/ijrys/p/8185584.html
Copyright © 2011-2022 走看看