c++(实验二)继承与多态

 

 

目录

继承的研究实验

三类继承方式中子类继承父类后的属性转换 

基础理论

代码实现

 结果截图

结论

实现额外内容

多继承

多继承的格式

继承与多继承同名问题

虚继承处理

菱形继承问题

代码简单研讨

有趣的细节问题 

友元函数的继承中问题

关于“爸爸 的朋友”可以访问“儿子”那些内容与“爸爸的朋友的儿子”可以访问的内容研究

代码设计

 测试结果

结论

多态的研究与实现、

一般多态

结果 

地址调用的特殊多态 

代码设计

结果展示

 关于虚析构函数与纯虚析构函数

测试代码设计

此代码运行结果为 

 原因

解决方法

简单表述纯虚析构函数

总结


特别强调,本文章全说作者个人实验结论与自己推测结果,如有不正确欢迎在评论区或者私信讨论

继承的研究实验

三类继承方式中子类继承父类后的属性转换 

基础理论

继承方式有三种  公共继承,保护继承,私有继承。

父类也叫基类,子类也叫派生类。

格式为class 子类:继承方式 父类

代码实现

#include <iostream>

class baba//爸爸类即父类
{
public:
	int a;//公共变量都能访问
protected:
	int b;//保护变量派生类(即子类)可访问
private:
	int c;//私有变量(子类也不可以访问)

};

class daer :public baba//大儿子,使用公共继承爸爸
{
public:
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};

class erer :protected baba//二儿子,使用保护继承爸爸
{
public:
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};
class saner :private baba//三儿子,使用私密继承爸爸
{
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};
//三类继承都不能访问爸爸的私密变量c说明父类的私密变量子类也不能访问

class ce//调动大儿子以测试大儿子的变量情况
{
	void dadia() {
		daer da;
		da.a = 100;
		da.b = 100;
		da.c = 100;
	}
};
//大儿子的a可以访问,但b,c不行,因为父类的b,c是保护和私有属性,
//可知道公共继承时保护属性继承还是保护,私有继承还是私有
class ceo//调用二儿子变量
{
	void erdia() {
		erer da;
		da.a = 100;
		da.b = 100;
		da.c = 100;
	}
};
//可见三个都不能访问,可见保护继承公共变量也变成了保护变量
class dasun :public daer//大孙子,继承大儿子
{
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};//发现可访问a,b,可见在孙子
class ersun :public erer//二孙子,继承二儿子
{
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};//c不可访问,可见孙子也不能访问爷爷私有变量。
class cet//调用二儿子变量
{
	void sundia() {
		ersun da;
		da.a = 100;
		da.b = 100;
		da.c = 100;
	}
};//调用二孙,发现a,b,c皆是不能访问,可见二孙继承的类已经不是公共类。但二二孙可以访问,所以是保护类
class sansun :public saner//三孙子,继承三儿子
{
	void dia() {
		a = 100;
		b = 100;
		c = 100;
	}
};//三个不能访问,可见三儿的变量都是私有变量了。

 结果截图

 

结论

三类继承共同点:

所有子类继承都不能访问父类的私有变量

可以访问父类的

公共继承

父类中公共为公共,保护为保护

保护继承

父类中所有为保护

私有继承

父类中所有为私有

实现额外内容

关于b private继承a类public时,使用using变为public

class baba
{
public:
	int a=10;
	int b=100;
	int c=1000;

};


class saner :private baba
{
public:
	using baba::a;
};

class ce {
	void yong() {
		saner san;
		san.a = 11;//不会报错,可见成功改为了public
		//san.b = 11;//会报错,可见成功继承并且为私密

	}
};

多继承

多继承的格式

class 子类:继承方式 父类 ,继承方式 父类

继承与多继承同名问题

子类中的同名成员会覆盖父类中所有的同名成员(包括重载)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值