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
相关推荐
Starry_hello world3 小时前
C++ 线程 (3)
c++
spencer_tseng3 小时前
springcloud + javaframework + h5
java·spring·spring cloud
雍凉明月夜3 小时前
c++ 精学笔记记录Ⅲ
c++·笔记·学习
月明长歌4 小时前
【码道初阶】【Leetcode606】二叉树转字符串:前序遍历 + 括号精简规则,一次递归搞定
java·数据结构·算法·leetcode·二叉树
原来是好奇心4 小时前
深入Spring Boot源码(八):高级特性与扩展点深度解析
java·源码·springboot
oioihoii4 小时前
C++共享内存小白入门指南
java·c++·算法
布茹 ei ai4 小时前
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)
开发语言·c++·qt·开源·开源项目·天气预报
Bruce_kaizy4 小时前
c++图论————图的基本与遍历
c++·算法·图论
Zmm147258369_4 小时前
好用的PC耐力板机构
c++
@淡 定4 小时前
线程安全的日期格式化:避免 SimpleDateFormat 并发问题
java