C++初学6

C++day6
	子类的构造、析构、拷贝
		执行构造时按顺序先执行父类构造
		执行析构时,先把自己释放,再释放父类、祖父。。。
			delete掉void*类型可能会导致无法调用析构函数
		子类对象初始化新的子类对象,会自动调用父类缺省构造,再调用自己的缺省构造
			子类调用拷贝构造,需要显式调用父类拷贝构造,否则会调用父类无惨构造
	私有继承、保护继承
		private
			子类用private继承父类,public成员会变成private,是为了防止父类成员扩散
			可调用的情况
				1、该成员函数 2、友元函数
		protected
			子类用protected继承父类,public成员会变成protected,是为了防止父类成员扩散
			可调用的情况
				1、该成员函数 2、友元函数 3、他作为父类声明的子类
	多重继承、钻石继承、虚继承
		多重继承
			一个子类有多个父类,继承表按照顺序继承所有父类的属性,按照顺序调用所有父类的构造
			子类中会标记每个父类的存储位置
			子类指针转换成父类的隐式指针时,编译器自动计算父类中内存所在子类中的位置,地址会自动进行偏移计算
			名字冲突
				父类中同名成员,可正常继承,但使用时需要(类名::成员名)
		钻石继承
			继承关系构成了菱形
			访问祖先类中的成员需要(类名::成员名)
		虚继承
			virtual
			钻石继承时会造成冗余,使用虚继承可使内容只保留一份
			由子类覆盖父类,所以相同函数会在最早的祖先类中被声明,会被之后的子类覆盖,所以子类可以调用函数,但实际的内存却在祖先类中。
	虚函数、覆盖、多态
		虚函数
			virtual修饰
		覆盖
			子类覆盖父类虚函数
		多态
			子类覆盖了父类,但子类、父类的指针都可以调用该函数,不同的类调用它的结果是不同的
	覆盖和多态的条件
		覆盖(在virtual修饰下)
			父类中的函数被virtual修饰,且函数完全一致
			const修饰返回值时会直接出错
			参数的加const依旧会被覆盖
			参数的类型不同时不会被覆盖
			常函数了就不会被覆盖(const加载末尾)
		多态
			父子类之间有函数覆盖关系
			父类的指针或引用指向子类对象
			在构造、析构函数中调用虚函数,会因为作用域的不同,导致同一个函数有不同的结果
	虚函数的特点
		在构造的时候,由于子类还没有运行构造函数,所以父类的构造函数不会被覆盖
		在析构时,由于子类已经完成了析构函数,所以父类的析构函数不会再被子类的覆盖
	纯虚函数和抽象类
		纯虚函数
			在虚函数后面添加=0;
			可以不实现,但实现必须在类外
			只能在父类的构造函数、析构函数中调用
		抽象类
			成员函数中有纯虚函数,这种类叫抽象类
			抽象类不能实例化(不能创建对象)
			必须被继承
				虚函数被覆盖
					子类实例化对象
				虚函数没被覆盖
					子类变为抽象类,无法实例化
		纯抽象类
			所有成员函数都是纯虚函数
			一般用于设计接口,这种类在子类被替换后不需要修改或少量修改即可继续使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值