码迷,mamicode.com
首页 > 编程语言 > 详细

C++虚拟函数

时间:2014-11-08 11:55:10      阅读:191      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

测试结果:

bubuko.com,布布扣

C++虚拟函数

标签:style   blog   http   io   color   os   使用   sp   div   

原文地址:http://www.cnblogs.com/ItEliter/p/virtualFunction.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!