C++继承

本文介绍了面向对象编程中的继承机制,包括公共继承、保护继承和私有继承的差异,以及它们对类成员访问权限的影响。详细阐述了继承的对象模型,指出子类如何继承父类的成员,并探讨了构造函数和析构函数的执行顺序。此外,还讨论了同名成员的处理方式,静态成员的访问,以及多继承的情况,特别是菱形继承问题和虚拟继承的解决方案。文章通过实例帮助理解继承在实际编程中的应用。
摘要由CSDN通过智能技术生成

继承

在这里插入图片描述
我们发现,上面的这些下级成员都有上级成员的共性,还添加了自己的个性
这个时候就能利用继承的技术,减少重复的代码

语法

class 子类 : 权限 父类{ };

class son:public father{ };
class animal {
public:
	int age;
};
class dog : public animal{//继承的语法
public:
	string kind = "狗";
};

三种继承的方式

继承方式一共有三种
	公共继承
	保护继承
	私有继承

在这里插入图片描述

如上图
	A类的private私有权限,它的子类全部没法访问
	
	若是以public方式继承,则除了父类的私有成员无法继承外,其他全部相同

	若是以protected方式继承,则除了父类的私有成员无法继承外,其余继承的成员全部权限降级为protected

	若是以private方式继承,则除了父类的私有成员无法访问,其余继承的成员全部权限降级为private

继承的对象模型

即继承父类的成员是否占用子类的类空间
父类无论什么权限的属性,只要是非静态的成员都会被子类继承拷贝,但是父类私有成员子类无法访问。
再加上子类的自身成员就是整体的子类对象模型

class father{
	publicint a;
	protect:	int b;
	private:	int c;
};
class son:public father{//sizeof(son)=16
	int d;
}

用vs自带的工具查看类

开始菜单找到VS的文件夹
进入后会有开发人员命令提示窗口
在里面跳转到要查看的类所在项目的文件夹
然后输入以下代码

cl /d1 reportSingleClassLayout<> <文件名>

在这里插入图片描述

继承的构造函数和析构函数顺序

在这里插入图片描述

构造子类的时候会先构造父类,析构子类时会先析构子类

继承中同名的成员处理方式

访问子类成员,直接<子类>.<成员>
访问父类成员,则 <子类>.<父类>::<成员>

class animal {
public:
	int num;
};
class dog : public animal{
public:
	int num;
};
void main() {
	dog p;
	p.num = 10;
	p.animal::num = 12;
}

继承中同名的静态成员处理方式

1、通过对象访问静态成员变量,与普通同名成员处理方式一样
2、通过类名直接访问

class animal {
public:
	static int num;
};
class dog : public animal{
public:
	static int num;
};
int dog::num = 10;
int animal::num = 11;
void main() {
	cout<<dog::animal::num;//输出结果是11
}

多继承语法

class xixi :public dog, public animal//对处理两个父类中的同名成员,则需要加作用域进行分辨

菱形继承

在这里插入图片描述
在这里插入图片描述

现在假设基类中有一个成员age,那么羊就会有它自己的age,驼也会有自己的age
但是,草泥马就继承了两份age,这样会造成资源的浪费
所以就用virtual类对age进行修饰

```cpp
class animal {
public:
	int age;
};
class yang :virtual public animal{
public:
	static int num;
};
class tuo :virtual public animal {

};
class yangtuo :virtual public yang, virtual public tuo{};//这样yangtuo的age就是同一份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值