C++中的继承


继承的作用
父类中非保护权限的方法和属性(函数和变量)拷贝至子类(可以简单这么理解,因为有重写和虚函数指针这种东西不好理解,后面的博文会另外介绍)

继承的基本语法:

class 子类名 : 继承方式(权限) 基类名(父类名)
{

}

简单的实现和测试:

class BasePage
{
public:
	void header()
	{
		cout << "基础框架" << endl;
	}
};

class FuncFragment : public BasePage
{
public:
	void content()
	{
		cout << "正文" << endl;
	}
};

void test5()
{
	FuncFragment().header();    //这里访问的是子类继承过来的方法,不是父类的方法
	FuncFragment().content();
    
}

注意:

  • class中的默认权限为private
  • 父类中的private(私有)成员在子类中无法使用(被继承过去了,也占用空间,但是被隐藏了,无法访问)。

不同继承方式继承带来的区别:

  • public: 父类中所有public成员在子类中为public属性,父类中所有protected成员在子类中为protected属性
  • protected: 父类中所有public成员和protected成员,在子类中为protected属性
  • private: 父类中所有public成员和protected成员,在子类中为private属性

关于虚继承:

有一个基本类: 动物类
两个子类: 羊类骆驼类
一个孙子类(没有孙子类): 羊驼类

  • 当羊类,和驼类继承动物类;羊驼类继承羊类和驼类
    会导致动物类被羊驼类多次继承(菱形继承)
    为了避免这种情况,就有了虚继承的出现
  • 虚继承:可以理解为共享数据(或者理解为复制地址),在子类中更改虚继承的数据时,虚基类中对应的值也会被更改
class Animal		//虚基类
{
public:
	Animal(){
		len = 10;
	};
	int len;
};


class Sheep : virtual public Animal
{
};
C
class Camel: virtual public Animal
{
};

class CNM : public Sheep, public Camel
{
};
//菱形继承问题:
void test2()
{
	CNM sun;
    cout << sun.len << endl;
	cout << CNM().Sheep::len << endl;
}

来看一下这时的内存分部:
羊驼类内存分部
上图显示,此时羊驼类占12字节
羊类(一个虚指针)占4字节
骆驼类(一个虚指针)占4字节
动物类(一个虚基类)占4字节​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KamikazePilot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值