C++相关继承学习笔记(一)

时间:2020-04-01
本文章向大家介绍C++相关继承学习笔记(一),主要包括C++相关继承学习笔记(一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

为解决在需要不同类中需要相同的成员数据减少代码量,踏上了学习继
承和派生这条不归路,根据分为子类和父类,子类可以从父类中继
承一定的成员变量减少相应的代码量,仅继承父类中函数时由于规定类
中非静态成员属性真正属于某个特定对象,静态成员属性和函数均为对
象间共享,此时来获取子的所占内存(大概是这么称呼吧),可以得到子
类所占的所占的字节数为1:

#include<iostream>
using namespace std;
class Parent
{
public:
	void fun()
	{
		cout << " fun is running";
	}
};
class Son :public Parent
{

};
int main()
{
	cout << sizeof(Son);
	return 0;
}

可以使用VS开发者工具来查看具体的继承方式。

一,打开VS2019 Developer Command Prompt
二,使用cd+文件所在路径来进入cpp所在位置
三,输入cl /d1 reportSingleClassLayout子类名 cpp名 来查看子类的继承的内容

可以直接从底层去了解到底子类中继承了父类的什么东西,方便了解所
学内容,根据子类继承父类的语法:子类名:继承方式 父类来继承父类
分为公有继承,私有继承,保护继承其中值得注意的是当父类中数据是
私有数据时并不会继承,或者说是真的有继承只是编译器隐瞒该数据
因为当代码改为:

#include<iostream>
using namespace std;
class Parent
{
public:
	int number;
	void fun()
	{
		cout << " fun is running";
	}
private:int height;
protected:int weight;
};
class Son :public Parent
{

};
int main()
{
	cout << sizeof(Son);
	return 0;
}

会发现按照父类中私有数据不会被子类继承的方式输出结果应该是8而
不是12,一个int占4个字节所以子类的确是有继承父类中的私有数据
只是编译器隐藏了该值,如果想在类外访问该私有数据可以通过友元来
获取私有数据,结合开发者工具更具说服力。

总不能是开发者工具欺骗使用者吧(手动狗头),说到继承方式除了公有
继承不会改变父类中的数据类型该是公有就是公有,保护就是保护,其
余根据继承方式保护继承中父类中的除私有数据外继承到子类中变为
保护形式,私有继承将父类中除私有数据外继承到子类中变为私有数据
继承中构造和析构顺序:先构造父类,再构造子类,先析构子类再析构父
类,可以生动形象地说明这一顺序的是先有父亲后有儿子,然后白发人送
黑发人(误)。
继承中会涉及到子类和父类存在相同的成员属性和成员行为的情况。

#include<iostream>
using namespace std;
class Parent
{
public:
	Parent() 
	{
		number = 6;
	}
	int number;
};
class Son :public Parent
{
public:
	Son()
	{
		number = 7;
	}
	int number;
};
int main()
{
	Son son;
	cout << son.number;
	return 0;
}

针对如上代码两个类均有默认构造函数,在创建对象的时候就会调用默
认构造函数,此时直接输出的是son对象中number是7,如果想访问父类
相同成员属性中的数据可以通过添加作用域符号来访问。
cout << son.Parent::number;

想要调用父类中的成员函数也是如此添加作用域符号来进行访问,也说
不应该涉及到继承时候整几个成员属性相同的情况。
C++中还有多继承一个子类可以有多个父类(大逆不道,狗头)。
其语法为子类:继承方式 父类,继承方式 父类,......来多继承不过这
样就会大大增加不同类中相同成员属性的碰撞,所以还是不用的好像
C++--(java)就原则上不允许多继承。

原文地址:https://www.cnblogs.com/pekkasuper/p/12613424.html