多态——动态绑定

来源:互联网 发布:linux 查看文件内容 编辑:程序博客网 时间:2024/06/07 07:02

写出下面程序的输出结果

class A{public: void FuncA() {     printf( "FuncA called\n" ); } virtual void FuncB() {     printf( "FuncB called\n" ); }};class B : public A{public: void FuncA() {     A::FuncA();     printf( "FuncAB called\n" ); } virtual void FuncB() {     printf( "FuncBB called\n" ); }};void main( void ){ B  b; A  *pa; pa = &b; A *pa2 = new A; pa->FuncA();  pa->FuncB();  pa2->FuncA();  pa2->FuncB(); delete pa2;}

解题思路:

B  b; 
A  *pa;
pa = &b;
A *pa2 = newA;
pa->FuncA(); //pa=&b动态绑定但是FuncA不是虚函数,所以FuncA called
pa->FuncB(); //FuncB是虚函数所以调用B中FuncB,FuncBB called  
pa2->FuncA(); //pa2是A类指针,不涉及虚函数,调用的都是A中函数,所以FuncA called FuncB called
pa2->FuncB()






1 0
原创粉丝点击