温馨提醒:此文续《》
(112)请写出下列程序的输出内容
代码如下:
1 #include2 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() const20 {21 cout << "A::fun2()" << endl;22 }23 };24 25 class B : public A26 {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() const41 {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 */
输出内容如上注释。
至于结果为什么是这样的,请参见《》中第(6)条及第(74)条。
或参见随笔《》理论点。
(113)请写出下列程序的输出内容
代码如下:
1 #include2 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 1017 418 119 请按任意键继续. . .20 */
输出内容如上注释。
(114)多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
虚函数表是在编译期建立,编译期各个虚函数被组织成了一个虚函数入口地址的数组。
一个对象的隐藏成员--虚函数表指针是在运行期--即构造函数被调用时进行初始化的,这也正是实现多态的关键。
(115)C++模板与泛型编程的区别是什么?
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。
模板是泛型编程所使用的方法,泛型是对模板的推广。
(116)待续......
Good Good Study, Day Day Up.
顺序 选择 循环 总结