C++系列-继承方式

继承方式

  • 继承的语法

  • 继承方式:

  • 继承可以减少重复的代码。

  • 继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。

  • 基类=父类,派生类=子类,派生类是在继承了基类的部分成员基础上,加上自己的成员而产生的类。


继承的语法

cpp 复制代码
class 子类名 : 继承方式 父类名1 , 继承方式 父类名2 , ..... 
{
	派生类的成员
};

继承方式:

  • public
  • protected
  • private

继承方式的特点

  • 无论哪种继承方式,父类中的private成员在子类中均不可以访问。
  • public继承中,父类中public和protected权限到子类中不变。
  • protected继承中,父类中的public和protected权限到子类中变为protected。
  • private继承中,父类中的public和protected权限到子类中变为private。

继承方式的举例

  • public继承
cpp 复制代码
code:
	#include <iostream>
	using namespace std;
	class Father
	{
	public:
		int m_public_a=1;
	protected:
		int m_protected_a=11;
	private:
		int m_private_a=111;
	public:
		void show_info()
		{
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << ", m_private_a: " << m_private_a << endl;
		}
	};
	
	class Son : public Father
	{
	public:
		void show_info_1()
		{
			m_public_a = 5;
			m_protected_a = 55;
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << endl;
			//m_private_a = 555;		// 父类中的私有成员到子类中无法访问
		}
	};
	
	void test01()
	{
		Son s1;
		s1.m_public_a = 3;
		// s1.m_protected_a = 333;		//父类中的protected权限的成员到子类中仍是protected, 在类中可以访问,类外不行
		s1.show_info_1();
	
	}
	void main()
	{	
		test01();
		system("pause");
	}
result:
	m_public_a: 5, m_protected_a: 55
  • protected继承
cpp 复制代码
code:
	#include <iostream>
	using namespace std;
	class Father
	{
	public:
		int m_public_a=1;
	protected:
		int m_protected_a=11;
	private:
		int m_private_a=111;
	public:
		void show_info()
		{
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << ", m_private_a: " << m_private_a << endl;
		}
	};
	
	class Son: protected Father
	{
	public:
		void show_info_1()
		{
			m_public_a = 5;
			m_protected_a = 55;
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << endl;
			//m_private_a = 555;		// 父类中的私有成员到子类中无法访问
		}
	};
	
	void test01()
	{
		Son s1;
		//s1.m_public_a = 3;			// 父类中的public权限的成员到protected继承方式的子类中仍是protected, 在类中可以访问,类外不行
		// s1.m_protected_a = 333;		// 父类中的protected权限的成员到protected继承方式的子类中仍是protected, 在类中可以访问,类外不行
		s1.show_info_1();
	
	}
	void main()
	{	
		test01();
		system("pause");
	}
result:
	m_public_a: 5, m_protected_a: 55

  • private继承
cpp 复制代码
code:
	#include <iostream>
	using namespace std;
	class Father
	{
	public:
		int m_public_a=1;
	protected:
		int m_protected_a=11;
	private:
		int m_private_a=111;
	public:
		void show_info()
		{
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << ", m_private_a: " << m_private_a << endl;
		}
	};
	
	class Son: private Father
	{
	public:
		void show_info_1()
		{
			m_public_a = 5;
			m_protected_a = 55;
			cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << endl;
			//m_private_a = 555;		// 父类中的私有成员到子类中无法访问
		}
	};
	class Grandson: public Son
	{
	public:
		void show_info_1()
		{
			//m_public_a = 5;			// 在Son类中,因为是以private方式继承,原Father中的public和protected权限的成员都变成了private,所以当Grandson再使用public方式继承时,无法访问。
			//m_protected_a = 55;
			//cout << "m_public_a: " << m_public_a << ", m_protected_a: " << m_protected_a << endl;
		}
	};
	void test01()
	{
		Son s1;
		//s1.m_public_a = 3;			// 父类中的public权限的成员到private继承方式的子类中是private, 在类中可以访问,类外不行
		//s1.m_protected_a = 333;		// 父类中的protected权限的成员到private继承方式的子类中是private, 在类中可以访问,类外不行
		s1.show_info_1();
	
	}
	void main()
	{	
		test01();
		system("pause");
	}
result:
	m_public_a: 5, m_protected_a: 55
相关推荐
阳光雨滴14 分钟前
使用wpf用户控件编程落石效果动画
c++·wpf
爱读源码的大都督24 分钟前
为什么有了HTTP,还需要gPRC?
java·后端·架构
Lucky_Turtle43 分钟前
【Java Xml】Apache Commons Digester3解析
xml·java·apache
小贾要学习1 小时前
【数据结构】C++实现红黑树
数据结构·c++
聪明的笨猪猪1 小时前
Java Redis “缓存设计”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
FIavor.1 小时前
我发送给Apifox是http://localhost:9002/goods/getByUserName?name=张三 为什么会是500哪里错了?
java·服务器·网络协议·http
ID_180079054731 小时前
京东获取整站实时商品详情数据|商品标题|数据分析提取教程
java·开发语言
ajassi20001 小时前
开源 C++ QT QML 开发(十七)进程--LocalSocket
c++·qt·开源
微露清风2 小时前
系统性学习C++-第五讲-内存管理
java·c++·学习
计算机毕业设计木哥2 小时前
计算机毕业设计选题推荐:基于SpringBoot和Vue的快递物流仓库管理系统【源码+文档+调试】
java·vue.js·spring boot·后端·课程设计