温馨提醒:此文续《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.
顺序 选择 循环 总结