1.构造函数
功能:当我们想要做到同时定义一个结构体变量,并且对结构体成员进行赋值时,我们可以使用构造函数。(实现定义结构体变量的同时,赋值结构体里面的成员)
构造函数的特性:
1.与类同名
2.没有返回值
3.创建对象时执行
4.主要用于初始化
5.可以有多个,称为重载,但是要有区别(参数的个数,类型,与返回类型无关)
6.编译器没要求必须提供(可有可无,如果定义了无参数的构造函数,那么就会自动运行)
2.析构函数
情景条件:当我们构造函数中如果出现了malloc分配空间的情况,那么我们就需要考虑空间的释放,但是在什么时候释放最合理?答案是在构造函数使用完毕的的时候释放最合理。因此我们需要析构函数~Person。
功能:在构造函数使用完毕后,实现析构函数中的功能,比如构造函数中分配了空间,析构函数就可以在构造函数使用完毕后释放空间。
析构函数特性:
1.只能有一个析构函数
2.不能带任何参数
3.不能带返回值
4.主要用于清理工作
5.编译器不要求必须提供(使用完毕后无需调用,编译器自动执行析构函数)
3.继承
1.什么是继承
继承就是数据的复制,从反汇编来看,继承和不继承对于成员的复制都是一样的)
2.为什么要用继承
可以减少代码的重复,提高书写
要点:
1.Person被称为父类或者基类
2.Teacher,Student被称为子类或者派生类
3.t,s被称为对象或者实例
4.可以用父类指针指向子类(但是有时由于父类子类的指针宽度不同,因此父类的指针并不能完全访问所有成员,同理,使用子类访问父类就可以做到完全访问)
3.多层继承
定义:多层继承就是z继承y,y继承了x,因此,z继承了y和x,但是y
和x同时又存在继承和被继承的关系
1.指针的访问
同理可知,子类对象的指针可以完全访问父类,“孙类”对象的指针可以完全访问父类和“爷类”,
由于宽度的原因,因此从“高辈”访问“低辈”时会出现宽度不够的问题,同样,“低辈”,访问“高辈”时也要担心宽度过多越界访问的问题。
2.多层结构体成员名字重合时
由实验可知,在多层结构体成员出现名字重复时,结构体的宽度还是不变,这就表示,在平时给结构体成员赋值的时候指明同叫“‘a”的成员属于哪个结构体,即如图:
4.多重继承
定义:多重继承区别于多层继承在于,多层继承是结构体之间类似于嵌套关系,但是多重继承是属于“一子多父”(从C语言的逻辑理解),一个结构体同时包含两个父类(先写谁,就先继承谁)
微软不建议的继承方式(容易出错)