标签:style blog http io color os 使用 sp div
一
为了方便使用多态特性,常常需要在基类中定义虚拟函数。
在很多情况下,积累本身生成对象是不合理的。例如,动物作为一个基类可以派生出猫、狗、猴子、熊、牛等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,江汉数定义为纯虚函数,编译器要求在派生类中必须予以重载以实现多态性。
同时,含有纯虚函数的类为抽象类,他不能生成对象。
纯虚函数的定义格式:
virtual 类型 函数名=0;
二
测试代码如下:
1 #include <iostream> 2 3 using namespace std; 4 5 class A{ 6 public: 7 A(); 8 void f1(); 9 virtual void f2(); 10 virtual void f3()=0; 11 virtual ~A(); 12 }; 13 14 A::A(){ 15 cout<<"construct class A"<<endl; 16 } 17 18 void A::f1(){ 19 cout<<"A : f1()"<<endl; 20 } 21 22 void A::f2(){ 23 cout<<"A : f2()"<<endl; 24 } 25 26 A::~A(){ 27 cout<<"A : ~A()"<<endl; 28 } 29 30 class B:public A{ 31 public: 32 B(); 33 void f1(); 34 void f2(); 35 void f3(); 36 virtual ~B(); 37 }; 38 39 B::B(){ 40 cout<<"construct class B"<<endl; 41 } 42 43 void B::f1(){ 44 cout<<"B : f1()"<<endl; 45 } 46 47 void B::f2(){ 48 cout<<"B : f2()"<<endl; 49 } 50 51 void B::f3(){ 52 cout<<"B : f3()"<<endl; 53 } 54 55 B::~B(){ 56 cout<<"B : ~B()"<<endl; 57 } 58 59 int main() 60 { 61 cout<<"initialize the A pointer to the B object."<<endl; 62 A *m_j = new B(); 63 m_j -> f1(); 64 m_j -> f2(); 65 m_j -> f3(); 66 delete m_j; 67 68 cout<<"initialize the B pointer to the B object."<<endl; 69 B *pB = new B(); 70 pB -> f1(); 71 pB -> f2(); 72 pB -> f3(); 73 delete pB; 74 return 0; 75 }
三
测试结果:
标签:style blog http io color os 使用 sp div
原文地址:http://www.cnblogs.com/ItEliter/p/virtualFunction.html