【C++学习笔记】虚基类

0x00 前言

文章中的文字可能存在语法错误以及标点错误,请谅解;

如果在文章中发现代码错误或其它问题请告知,感谢!

本文档为个人边学习边记录的C++笔记,非教程,笔记中会存在引用他人文章内容的部分,被引用的原文不会被特殊标记出来,但会在参考文档中给出原文链接。

0x01 虚基类

当某类部分或全部直接基类是从另一个共同基类派生而来时,在这些直接基类中从上一级共同基类继承来的成员就有相同的名称。在派生类对象中,这些同名数据成员在内存中同时拥有多个副本,同一个函数名会有多个映射。可以使用作用域分辨符来唯一表示并分别访问他们,也可以将共同基类设置为虚基类,这时从不同路径继承过来的同名数据成员在内存中就只有一个副本,同一个函数名也只有一个映射。这样就解决了同名成员的为衣标识问题。

虚基类的生命是在派生类的定义过程中进行的,其语法形式为:

class 派生类名:virtual 继承方式 基类名

声明了虚基类后,虚基类的成员函数在进一步派生过程中和派生类一起维护同一个数据副本。

例:虚基类举例

在这里插入图片描述

派生关系

在这里插入图片描述

成员构成图
#include <iostream>
using namespace std;

class Base0{
public:
	int var0;
	void fun0(){cout << "Member of Base0 " << endl;}
};

class Base1:virtual public Base0{
public:
	int var1;
};

class Base2:virtual public Base0{
public:
	int var2;
};

class Derived:public Base1, public Base2{
public:
	int var;
	void fun(){cout << "Member of Derived" << endl;}
};

int main() {
	Derived d;
	d.var0 = 2;		//直接访问虚基类的数据成员
	d.fun0();		//直接访问虚基类的函数成员
	
	return 0;
}

运行结果:

Member of Base0

《C++语言程序设计(第4版)》书上所有章节出现的示例源代码随着学习的深入会陆续上传至github,代码为个人手动输入并通过编译,有的示例代码可能没有注释:https://github.com/fyw4/C-plus-plus-learning-example

以上。

参考文档:
郑莉 董渊 何江舟.《C++语言程序设计(第4版)》[M].北京:清华大学出版社。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值