博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ - 纯虚函数的默认实现

Posted on 2012-09-25 20:00  神の大司命  阅读(952)  评论(0)    收藏  举报

1. 如下例程:

 1 class A
 2 {
 3 public:
 4     virtual void fun() = 0; // 纯虚函数
 5 protected:
 6 private:
 7 };
 8 
 9 /* 注意:即使有默认实现,类A仍然是抽象类,不能被实例化 */
10 void A::fun() // 纯虚函数的默认实现
11 {
12     std::cout << "hello A::fun()" << std::endl;
13 }
14 
15 class B : public A
16 {
17 public:
18     virtual void fun();
19 protected:
20 private:
21 };
22 
23 void B::fun()
24 {
25     A::fun(); // 打印hello A::fun(),可以手动调用基类的纯虚函数的默认实现
26     std::cout << "hello B::fun()" << std::endl;
27 }
28 
29 int main()
30 {
31     A * pA = new B(); // 或者B * pA = new B();也是一样
32     pA->A::fun(); // 打印hello A::fun()
33     // 注意:并不会因为基类A的纯虚函数A::fun提供了默认实现就会调用它,仍然是多态调用派生类的虚函数B::fun
34     pA->fun(); // 打印hello A::fun()和hello B::fun()
35 
36     return 0;
37 }