All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET实现页面间值传递的几种方法_.net资料_编程技术
ASP.NET2.0的multiview和wizard控件_.net资料_编程技术
Ajax清理缓存_[XML教程]
实用技巧:PHP中调用Java类的两种方法_php资料_编程技术
asp.net2.0服务器控件之Calendar控件
《Effective,C#》-使用成员初始化语句_[Asp.Net教程]
初试WAP之wml+ASP查询_[XML教程]
delphi映像内存的操作
包含实时功能的ASP.NET系统结构_.net资料_编程技术
ASP.NET实现重定向的三种方法的总结_.net资料_编程技术
Reading number is top 10 pictures
初五接财神啦!五路财神齐来到
战场废物1
The real super beauty12
美洲杯宝贝的雨中风情2
29 the belle stars after bath figure3
Sora aoi in China3
Compared GDP and per capita income in China for 40 years
Sora aoi mirror memorial classics2
人美胸美腿更美2
这才叫绝色美女1
Download software ranking
I'm come from Beijing1
SQL2000 For 4IN1
matrix1
WebService在.NET中的实战应用教学视频 → 第3集
仙剑奇侠传98硬盘WINXP版
美女游泳记
Professional killers2 for Android
dreamweaver8中文版
Unix video tutorial13
The cock of the Grosvenor LTD handsome
qq published in(发表于) 2014/7/9 22:40:33 Edit(编辑)
visual c++中虚基类的用法

visual c++中虚基类的用法

visual c++中虚基类的用法

visual c++中虚基类的用法

在多重继承中,经常会出现这种情况,类B和类C都是类A的派生类,而类D又是类B和类C的派生类,如图1所示。




图1 多重继承示意图

由于Class B和Class C都是Class A的派生类,它们都继承了Class A的特征,Class D是从Class B和Class C继承而来,这样,Class D中就继承了两次Class A的特征,当试图通过派生类对象直接访问基类A的成员时,将会导致编译时二义性错误。


#include "iostream.h"
class ClassA
{
public:
int a;
};
class ClassB:public ClassA
{
public:
int b;
};
class ClassC:public ClassA
{
public:
int c;
};
class ClassD : public ClassB,public ClassC
{
public:
int d;
};
void main()
{
ClassD example;
example.a=100;
}

这段代码中存在的二义性错误,由于编译器不知道“example.a”是从Class B继承下来的“a”还是从Class C继承下来的“a”。如果希望通过编译,就需要指定“a”是从哪个类间接派生而来的。


example.ClassB::a=100;

或:


example.ClassC::a=100;

从上面的例子中读者可以看出,上面这种情况不但浪费了存储空间(继承了两次Class A的特征),在访问成员时也较麻烦。为了解决这个问题,引出了虚基类的概念。

首先,读者要明确,虚基类并不是一种新型的类,而是一种派生方式。如果采用虚基类方式定义派生类,则在创建派生类对象时,类层次结构中某个虚基类的成员只出现一次,即基类的副本被所有派生类对象共享。

采用虚基类方式定义派生类的方法是在基类名的前面加上关键字virtual,而定义基类时不需要使用关键字virtual。

更改一下上面的例子:

……


class ClassB:public virtual ClassA
{
public:
int b;
};
class ClassC:public virtual ClassA
{
public:
int c;
};

……

无论采用哪种方式多重继承,虚基类的数据成员只生成一份。虚基类的使用既节约了内存空间,又避免了在多重派生类中类成员的不明确性。


添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.