码迷,mamicode.com
首页 > 其他好文 > 详细

虚函数

时间:2016-07-14 03:16:30      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 

7.5.2虚基类

如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。

如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象。

要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类称为虚基类。

虚继承声明使用关键字virtual

 

技术分享

 

//1>main.cpp(60) : error C2385 : 对“num”的访问不明确

//1> main.cpp(60) : note : 可能是“num”(位于基“obj”中)

//1> main.cpp(60) : note : 也可能是“num”(位于基“obj”中)

 

 1 #include <iostream>
 2 
 3 class obj
 4 {
 5 public:
 6     int num;
 7     obj(int data):num(data)
 8     {
 9         std::cout << "obj create" << std::endl;
10     }
11     ~obj()
12     {
13         std::cout << "obj delete" << std::endl;
14     }
15 };
16 
17 class Aobj :public obj
18 {
19 public:
20     Aobj(int data) :obj(data)
21     {
22         std::cout << "Aobj create" << std::endl;
23     }
24     ~Aobj()
25     {
26         std::cout << "Aobj delete" << std::endl;
27     }
28 };
29 
30 class Bobj :public obj
31 {
32 public:
33     Bobj(int data) :obj(data)
34     {
35         std::cout << "Bobj create" << std::endl;
36     }
37     ~Bobj()
38     {
39         std::cout << "Bobj delete" << std::endl;
40     }
41 };
42 
43 class ABobj :public Aobj, public Bobj
44 {
45 public:
46     ABobj(int x, int y) :Aobj(x), Bobj(y)
47     {
48         std::cout << "ABobj create" << std::endl;
49     }
50     ~ABobj()
51     {
52         std::cout << "ABobj delete" << std::endl;
53     }
54 };
55 
56 void main()
57 {
58     ABobj *p = new ABobj(10, 20);
59 
60     //std::cout << p->num;
61 
62     //1>main.cpp(60) : error C2385 : 对“num”的访问不明确
63     //1>  main.cpp(60) : note : 可能是“num”(位于基“obj”中)
64     //1>  main.cpp(60) : note : 也可能是“num”(位于基“obj”中)
65 
66     std::cout << p->Aobj::num << std::endl;//10
67     std::cout << p->Bobj::num << std::endl;//20
68 
69     delete p;
70     
71     system("pause");
72 }

 

virtual

 

技术分享

 

virtual

 

 

第8章 虚函数与多态性

 

多态性是指一个名字,多种语义;或界面相同,多种实现。

重载函数是多态性的一种简单形式。

虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。

 

8.2 类指针的关系

8.3 虚函数与动态联编

8.4 纯虚函数与抽象类

8.5 虚函数和多态性的应用

小结

 

8.2 类指针的关系

 

基类指针和派生类指针与基类对象和派生类对象4种可能匹配:

直接用基类指针引用基类对象;

直接用派生类指针引用派生类对象;

用基类指针引用一个派生类对象;

用派生类指针引用一个基类对象;

 

 

 

8.3 虚函数与动态联编

8.4 纯虚函数与抽象类

8.5 虚函数和多态性的应用

小结

虚函数

标签:

原文地址:http://www.cnblogs.com/denggelin/p/5668759.html

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