学习C++的第10天之C++的继承

初学C++的继承

继承的语法以及好处

先来简单了解一下C++中继承的语法

class 子类 : 继承方式 父类

例如:class Son: public Father
子类也叫派生类
父类也叫基类
这便是继承的语法。继承的好处是减少重复代码,提高效率。
派生类由两部分组成,一部分是从父类继承过来的,一部分是子类新增的成员。从父类继承过来的表现的是共性,自己新增的表现的是个性。

派生类的定义

派生类的定义格式

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

}

继承方式

public :公有继承
private:私有继承
protected:保护继承

父类中的私有成员,子类都不可以访问(无论那种继承方式)。就好像父亲有一些隐私的东西,儿子是无法访问的。
1、公有继承,父类中的公有权限下的属性继承到子类中依然是公有属性,保护权限下的属性继承到子类中也是保护属性。

2、保护继承,父类中的公有权限下的属性继承到子类中会变成保护权限,父类中的保护权限的属性继承到子类中还是保护权限

3、私有继承,父类中的公有权限下的属性和保护权限下的属性继承到子类中全部变成了私有属性

即:父类中的私有权限下的属性,子类无法访问;公有继承,父类中的属性继承到子类后依然是原来的权限;保护继承,父类中的属性继承到子类后变成保护权属性;私有继承,父类中的属性继承到子类后变成私有属性。

公有继承代码如下:

//公有继承
class Father1
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

class Son1 :public Father1
{
public:
	void func()
	{
		a = 100;	//父类中的a到子类后是public权限
		b = 100;	//父类中的b到子类后是protected权限 类外无法访问
		//c = 100;	//报错:父类中的私有权限子类无法访问
	}
};

保护继承代码如下:

//保护继承
class Father2
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

class Son2 :protected Father2
{
public:
	void func()
	{
		a = 100;	//父类中的a到子类后是protected权限 类外无法访问
		b = 100;	//父类中的b到子类后是protected权限 类外无法访问
		//c = 100;	//报错:父类中的私有权限子类无法访问
	}
};

私有继承代码如下:

//私有继承
class Father3
{
public:
	int a;
protected:
	int b;
private:
	int c;
};
class Son3 :private Father3
{
public:
	void func()
	{
		a = 100;	//父类中的a到子类后是private权限 类外无法访问
		b = 100;	//父类中的b到子类后是private权限 类外无法访问
		//c = 100;	//报错:父类中的私有权限子类无法访问
	}
};

其实,父类中的东西都被子类给继承了,但是由于编译器做了一层保护,所以子类访问不了父类中的私有成员
用于验证的代码如下:

class Father
{
public:
	int a;
protected:
	int b;
private:
	int c;
};

class Son :public Father
{
public:
	int d;
};

int main()
{
	cout << "sizeof(Son) = " << sizeof(Son) << endl;	//16 
	//父类中的所有东西都被子类继承了下去,但是被编译器进行了保护
	return 0;
}

父类中的构造与析构

定义子类对象的时候会先调用父类的构造,再调用子类的构造,析构的顺序与构造相反。如果子类中有其他类的对象,先调用父类的构造,在调用子类中的对象的构造,最后调用子类的构造,析构顺序与构造相反。父类中的构造,拷贝构造,析构和赋值运算符重载这几种函数不会被子类继承

多继承基础语法

class 子类 : 继承方法 父类1,继承方法 父类2

不建议使用过多的多继承,因为可能会出现重名的情况可能会需要疯狂添加作用域,带来了很多麻烦。

菱形继承

即一个父类被两个子类继承,这两个子类又被一个子类多继承
代码如下:

class A {};
class B :public A {};
class C :public A {};
class D :public B,public C {};

比如:羊类继承动物类,骆驼类继承动物类。而羊驼类继承羊类和骆驼类

今天就学到这里了,没学太多,而且今天学的不是很难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值