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 }
浙公网安备 33010602011771号