• C++笔试题2(基础题)


    温馨提醒:此文续《C++笔试题1(基础题)

    (112)请写出下列程序的输出内容

    代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class A
     5 {
     6 public:
     7     A() 
     8     { 
     9         cout << "A::A()" << endl; 
    10     }
    11     virtual ~A() 
    12     {
    13         cout << "A::~A()" << endl;
    14     }
    15     void fun1() const 
    16     {
    17         cout << "A::fun1()" << endl;
    18     }
    19     virtual void fun2() const
    20     {
    21         cout << "A::fun2()" << endl;
    22     }
    23 };
    24 
    25 class B : public A
    26 {
    27 public:
    28     B() 
    29     { 
    30         cout << "B::B()" << endl; 
    31     }
    32     ~B() 
    33     {
    34         cout << "B::~B()" << endl;
    35     }
    36     void fun1() const 
    37     {
    38         cout << "B::fun1()" << endl;
    39     }
    40     void fun2() const
    41     {
    42         cout << "B::fun2()" << endl;
    43     }
    44 };
    45 
    46 void Test1(const A * pA)
    47 {
    48     pA->fun1();
    49     pA->fun2();
    50     delete pA;
    51 }
    52 
    53 void Test2(const B * pB)
    54 {
    55     pB->fun1();
    56     pB->fun2();
    57     delete pB;
    58 }
    59 
    60 void main()
    61 {
    62     cout << "=====Test1====" << endl;
    63     Test1(new B());
    64     cout << "====Test2====" << endl;
    65     Test2(new B());
    66     system("pause");
    67 }
    68 
    69 // run out:
    70 /*
    71 =====Test1====
    72 A::A()
    73 B::B()
    74 A::fun1()
    75 B::fun2()
    76 B::~B()
    77 A::~A()
    78 ====Test2====
    79 A::A()
    80 B::B()
    81 B::fun1()
    82 B::fun2()
    83 B::~B()
    84 A::~A()
    85 请按任意键继续. . .
    86 */

    输出内容如上注释。

    至于结果为什么是这样的,请参见《C++笔试题1(基础题)》中第(6)条及第(74)条。

    或参见随笔《重载、覆盖、隐藏》理论点。

    (113)请写出下列程序的输出内容

    代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void main()
     5 {
     6     for (int i = 10; --i >= 0; i = i>>1)
     7     {
     8         cout << (i + 1) << endl;
     9     }
    10 
    11     system("pause");
    12 }
    13 
    14 // run out:
    15 /*
    16 10
    17 4
    18 1
    19 请按任意键继续. . .
    20 */

    输出内容如上注释。

     (114)多态类中的虚函数表是Compile-Time还是Run-Time时建立的?

    虚函数表是在编译期建立,编译期各个虚函数被组织成了一个虚函数入口地址的数组。

    一个对象的隐藏成员--虚函数表指针是在运行期--即构造函数被调用时进行初始化的,这也正是实现多态的关键。

    (115)C++模板与泛型编程的区别是什么?

    泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。

    模板是泛型编程所使用的方法,泛型是对模板的推广。

    (116)面向对象编程所依赖的多态性称为运行时多态性;

    泛型编程所依赖的多态性称为编译时多态性或参数式多态性。

    (117)待续......

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    六、Linux计划任务及压缩归档
    四、用户管理
    三、vim编辑器详解
    八、RAID磁盘阵列及CentOS7系统启动流程
    五、权限管理
    二、Linux常用命令
    七、Linux磁盘管理及LVM讲解
    一、Linux常用命令
    JS继承的实现方式 原型 原型链 prototype和_proto_的区别
    js引用类型(Object、Array)
  • 原文地址:https://www.cnblogs.com/Braveliu/p/6602495.html
Copyright © 2020-2023  润新知