c++程序设计基础-类与对象:继承

c++程序设计基础-类与对象:继承,第1张

目录

一、继承的基本概念

(1)一般语法

1.单继承派生类的语法格式为

2.多继承派生类的语法格式为

(2)派生类的功能主要实现方式

(3)示例代码

二、继承方式

(1)三种继承方式

(2)示例代码


一、继承的基本概念

继承是c++的三大特性之一,是学习c++的重点

引入:自然界中继承的概念十分普遍。例如,猫和狗都属于哺乳动物,具备胎生、哺乳、恒温等共性,又具备各自特性。这种时候我们可以用继承的技术以减少重复的代码。

 

(1)一般语法 1.单继承派生类的语法格式为

class 派生类名:<继承方式>基类名

{

      ......//定义派生类新添加的成员

}

2.多继承派生类的语法格式为

class 派生类名:<继承方式>基类名1,......,<继承方式>基类名n

{

      ......//定义派生类新添加的成员

}

(2)派生类的功能主要实现方式

①吸收基类成员:继承基类所有的数据成员和函数成员。

②改造基类成员:可以重新定义从基类继承的函数成员。

③添加新成员:派生类可以增加新的功能。

从编码的角度看,派生类从基类中以较低的代价换来较大的灵活性:派生类可以对从基类继承过来的功能进行拓展、限制或改变;一旦产生了可靠的基类,只需要调试派生类中所作的修改即可。

(3)示例代码
#include
using namespace std;

//本段代码模仿某程序教学网页的排版方式,如果不运用继承的知识写出的代码大致如下。可以发现代码中java、python、c++的教学模块大量得进行了复制粘贴,其原因是三个教学模块的排版方式大致相同。
//java的页面
class Java
{
public:
	void header()
	{
		cout << "首页、公开课、登录...(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++..(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "Java的教学视频" << endl;
	}
};

//Python的页面
class Python
{
public:
	void header()
	{
		cout << "首页、公开课、登录...(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++..(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "Python的教学视频" << endl;
	}
};

//C++的页面
class Cpp
{
public:
	void header()
	{
		cout << "首页、公开课、登录...(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++..(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "C++的教学视频" << endl;
	}
};

void test01()
{
	cout << "----------------------------" << endl;
	cout << "java的下载页面如图所示:" << endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();
	cout << "----------------------------" << endl;
	cout << "Python的下载页面如图所示:" << endl;
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
	cout << "----------------------------" << endl;
	cout << "C++的下载页面如图所示:" << endl;
	Cpp c;
	c.header();
	c.footer();
	c.left();
	c.content();
}
int main()
{
	test01();

	system("pause");
	return 0;
}
#include
using namespace std;

//下面的代码中就运用了继承的技术。可以看到我们定义了一个公共页面的类,这是下面所有派生类(包括java、python、c++等派生类)的基类。其中的公共头部、公共底部和公共分类列表作为几个派生类的共同特征继承了下来。三个派生类也定义了各自的不同即content)
//统一排版风格的页面
class BasePage
{
public:
	void header()
	{
		cout << "首页、公开课、登录...(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++..(公共分类列表)" << endl;
	}
};

//Java的页面
class Java:public BasePage
{
public:
	void content()
	{
		cout << "java的教学视频" << endl;
	}
};

//Python的页面
class Python:public BasePage
{
public:
	void content()
	{
		cout << "Python的教学视频" << endl;
	}
};

//C++的页面
class Cpp:public BasePage
{
public:
	void content()
	{
		cout << "C++的教学视频" << endl;
	}
};

void test01()
{
	cout << "----------------------------" << endl;
	cout << "java的下载页面如图所示:" << endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();
	cout << "----------------------------" << endl;
	cout << "Python的下载页面如图所示:" << endl;
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
	cout << "----------------------------" << endl;
	cout << "C++的下载页面如图所示:" << endl;
	Cpp c;
	c.header();
	c.footer();
	c.left();
	c.content();
}
int main()
{
	test01();

	system("pause");
	return 0;
}

 

二、继承方式 (1)三种继承方式

①公共继承:父类公共->子类公共;父类保护->子类保护;父类私有->子类私有

②保护继承:父类公共->子类保护;父类保护->子类保护;父类私有->子类私有

③私有继承:父类公共->子类私有;父类保护->子类私有;父类私有->子类私有

④总结:三种继承方式,是什么继承方式,除私有权限外的两种权限就变为什么权限(如保护继承,除了私有权限在子类中仍为私有权限,其他的都变为了保护权限)

(2)示例代码
#include
using namespace std;

//公共继承
class Base01
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
//保护继承
class Base02
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
//私有继承
class Base03
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};



//继承公共继承
class Son01 :public Base01
{
public:
	void func()
	{
		m_A = 10;    //父类公共->子类公共
		m_B = 10;    //父类保护->子类保护
		m_C = 10;    //会报错,说明父类中的私有权限子类访问不了
	}
};
//继承保护继承
class Son02 :protected Base02
{
public:
	void func()
	{
		m_A = 10;    //父类公共->子类保护
		m_B = 10;    //父类保护->子类保护
		m_C = 10;    //会报错,说明父类中的私有权限子类访问不了
	}
};
//继承私有继承
class Son03 :private Base03
{
public:
	void func()
	{
		m_A = 10;    //父类公共->子类私有
		m_B = 10;    //父类保护->子类私有
		m_C = 10;    //会报错,说明父类中的私有权限子类访问不了
	}
};
void test01()
{
	Son01 s1;
	s1.m_A = 100;   //不会报错,父类公共->子类公共,类外可以访问
	s1.m_B = 100;   //会报错,因为父类保护->子类保护,类外不能访问

	Son02 s2;
	s2.m_A = 100;   //会报错,因为父类公共->子类保护,类外不能访问
	s2.m_B = 100;   //会报错,因为父类保护->子类保护,类外不能访问

	Son03 s3;
	s2.m_A = 100;   //会报错,因为父类公共->子类私有,类外不能访问
	s2.m_B = 100;   //会报错,因为父类保护->子类私有,类外不能访问
}

//以上规则拓展到子类的子类也是同理
int mian()
{
	test01();

	system("pause");
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324167.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存