虚基类
来源:互联网 发布:印度软件世界第一 编辑:程序博客网 时间:2024/05/21 22:57
2010-08-21
因为B虚继承A,所以B的大小多了4个字节,主要是是因为virtual。
虚基类的引入和说明
前面简单地介绍了要引进虚基类的原因。实际上,引进虚基类的真正目的是为了解决二义性问题。
虚基类说明格式如下:
virtual <继承方式><基类名>
其中,virtual是虚类的关键字。虚基类的说明是用在定义派生类时,写在派生类名的后面。例如:
{
public:
void f();
protected:
int a;
};
class B : virtual public A
{
protected:
int b;
};
class C : virtual public A
{
protected:
int c:
};
class D : public B, public C
{
public:
int g();
private:
int d;
};
由于使用了虚基类,使得类A,类B,类C和类D之间关系用DAG图示法表示如下:
A{ f(), a }
/ \
B{b} C{c}
\ /
D{g(),d}
从该图中可见不同继承路径的虚基类子对象被合并成为一个对象。这便是虚基类的作用,这样将消除了合并之前可能出现的二义性。这时,在类D的对象中只存在一个类A的对象。因此,下面的引用都是正确的:
D n;
n.f(); file://对f()引用是正确的。
void D::g()
{
f(); file://对f()引用是正确的。
}
下面程式段是正确的。
D n;
A *pa;
pa = &n;
其中,pa是指向类A对象的指针,n是类D的一个对象,&n是n对象的地址。pa=&n是让pa指针指向类D的对象,这是正确的,并且也无二义性。
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- Eclipse需要学的快捷键
- 拷贝构造函数与operator=
- 东软实训总结
- 多用户(windows)远程登录ubuntu 10.04 解决方案
- last
- 虚基类
- C#多线程学习(四) 多线程的自动管理(线程池)
- 《Online Game 数据处理与算法设计》第七章
- 常用数据类型转换CString double char int WCHAR
- TCP/IP网络编程之四书五经
- VS2005 tips 问题及解决方法 (未完待续。。。)
- 无法删除IE图标(被劫持)
- 托管线程处理的最佳做法
- 服务器上使用WMI报 '80041003' Automation 错误的解决办法