首页 > 编程语言 >C++面向对象三大特性之一(继承)

C++面向对象三大特性之一(继承)

时间:2024-08-26 15:26:03浏览次数:10  
标签:继承 子类 C++ 面向对象 protected private 父类 public 三大

面向对象思维是编程中很重要的一个思维,众所周知面向对象编程有三大特性封装、继承、多态,今天我就来分享一下三大特性之一的继承。

一、什么是继承?

我们举例说明,比如你老爸的财产你可以使用,这就是继承,在面向对象中,体现为一个子类可以使用父类的成员属性和成员函数,自己不用在类内实现就可以使用。但是你只能用你老爸允许你使用的财产,比如车,你老爸不允许你使用的财产,你是无法使用的,在面向对象中体现为父类的公有成员子类是可以继承使用的,但是父类的私有成员子类不可以继承使用,还有一个继承方式体现为你继承你老爸的财产之后你想不想让别人访问这些财产。

二、继承可以干什么?

继承可以省去很多的重复代码,减少工作量,程序的逻辑性也会更强,可读性也大大提高,而且会方便后期的运维。

三、继承的三种方式

1、public方式继承

创建一个父类Base1里面分别创建三种类型(public、protect、private)的成员属性,创建一个类Son1让它继承Base1以public方式,语法为class 子类类名 :继承方式 父类类名,可以看到我们Son1类内没有创建m_A和m_B属性但是我们可以直接在子类func函数中进行赋值不会报错这就是继承。(仔细看下面代码段的注释)

class Base1
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son1 :public Base1
{
public:
	void func()
	{
	 m_A = 100;//父类的public成员,通过Public继承,在子类中也是public属性
	 m_B = 100;//父类的protected成员,通过Public继承,在子类中是protected属性
	 //m_C = 100;//父类的私有成员,子类无法访问
	}
	
};

我们创建一个test01函数输出m_A和m_B,可以看到关于m_B的代码会报错,说明其不可类外访问验证了上面代码段的注释内容,而m_B可以正常输出。

void test01()
{
	Son1 s1;
	s1.m_A = 1000;
	cout << "s1.m_A="<<s1.m_A << endl;
	//s1.m_B = 1000;父类的protected成员,通过Public继承,在子类中是protected属性,类外不可访问
	//cout << "s1.m_B="<<s1.m_B << endl;
	
}

结果如下在这里插入图片描述

2、protect继承

同样我们创建一个父类Base2里面分别创建三种类型(public、protect、private)的成员属性,创建一个类Son2让它继承Base2以protect方式,语法依然为为class 子类类名 :继承方式 父类类名。(仔细看下面代码段的注释)

class Base2
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son2 :protected Base2
{
public:
	void func()
	{
		m_A = 100;//父类的public成员,通过protected继承,在子类中变为protected属性
		m_B = 100;//父类的protected成员,通过protected继承,在子类中变为protected属性
		//m_C = 100;//父类的私有成员,子类无法访问
	}

};

同样创建一个test02函数访问m_A和m_B,都出现了报错,所以我们进行了注释并解释了原因见下面代码注释。

void test02()
{
	Son2 s2;
	//s2.m_A = 1000;//父类的public成员,通过protected继承,在子类中变为protected属性,类外不可访问
	//s2.m_B = 1000;父类的protected成员,通过protected继承,在子类中是protected属性,类外不可访问
}

3、private继承

再次创建一个父类Base3里面分别创建三种类型(public、protect、private)的成员属性,创建一个类Son3让它继承Base3以private方式,

class Base3
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son3 :private Base3
{
public:
	void func()
	{
		m_A = 100;//父类的public成员,通过private继承,在子类中也是private属性
		m_B = 100;//父类的protected成员,通过private继承,在子类中也是private属性
		//m_C = 100;//父类的私有成员,子类无法访问
	}

};

并创建test03来访问m_A和m_B,发现不可访问原因见下面代码注释。

void test03()
{
	Son3 s3;
	//s3.m_A = 1000;//父类的public成员,通过private继承,在子类中也是private属性,类外不可访问
	//s3.m_B = 1000;//父类的protected成员,通过private继承,在子类中也是private属性,类外不可访问
}

四、总结

继承有三种方式public、protect、private他们继承后成员属性变化为
public
父类的public成员,通过Public继承,在子类中也是public属性,类外可访问
父类的protected成员,通过Public继承,在子类中是protected属性,类外不可访问
protect
父类的public成员,通过protected继承,在子类中变为protected属性,类外不可访问
父类的protected成员,通过protected继承,在子类中变为protected属性,类外不可访问
private
父类的public成员,通过private继承,在子类中也是private属性,类外不可访问
父类的protected成员,通过private继承,在子类中也是private属性,类外不可访问
另外父类的private成员不可被继承。

标签:继承,子类,C++,面向对象,protected,private,父类,public,三大
From: https://blog.csdn.net/m0_57094953/article/details/141562913

相关文章

  • 什么是友元?什么可以做友元?友元能干什么?(全局函数做友元,类做友元,成员函数做友元)c/c++
    一、什么是友元例如:你的生活中有一个特别好的朋友,你允许它进入你的房间(私有场所)也允许他进入客厅(相对公有场所),但是对于其他人你是不会允许他进入你的房间的,只允许他进入客厅。类对象也有这样类似的好朋友类,可以访问本类的私有成员,这个好朋友类就叫做这个类的友元,友元也可......
  • 【NOI】C++数据结构入门之一维数组(三)元素移动
    文章目录前言一、概念1.导入2.元素移动2.1逆序2.2删除2.3插入二、例题讲解问题:1009-数组逆序问题:1162-数组元素的删除问题:1211-数组元素的插入问题:1161.元素插入有序数组问题:1159.数组元素的移动三、总结四、感谢前言在继续我们的C++数据结构学习之旅......
  • UE5蓝图 离线实时语音转文字插件 教程 c/c++插件 毫秒级响应 比http更节约资源
    UE5蓝图实现离线实时语音转文字插件教程如何用UE5蓝图实现离线实时语音转文字,实时接收麦克风音频并且快速的转换成文字。那么我来分享一下ez2txt这个插件。bilibili使用教程效果展示:蓝图:只要启动麦克风就可以了,其他的繁琐步骤插件都封装好了。参数说明Rule1_m......
  • C++智能指针
    文章目录RAIIauto_ptrunique_ptrshare_ptrshared_ptr的线程安全问题shared_ptr循环引用weak_ptrRAIIRAII(ResourceAcquisitionIsInitialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接......
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
    目录1.内存池(MemoryPool)概念模型特点核心点实现适用场景经典示例实现代码解析2.自定义分配器(CustomAllocators)概念模型特点核心点实现适用场景经典示例实现代码解析高级自定义分配器示例代码解析总结        C++作为一种高性能编程语言,在......
  • c++关键字
    关键字作用:关键字是C++中预先保留的单词(标识符)在定义变量或者常量时候,不要用关键字C++关键字如下:关键字1.asmasm(指令字符串):允许在C++程序中嵌入汇编代码。2.autoauto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的......
  • 【C++】初识C++模板与STL
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理本章将简单分享C++模板与STL相关知识,与之相关更多知识将留到下次更详细地来分享给大家......
  • vscode 编译c++项目如何配置
    配置c_cpp_properties.json文件主要用于辅助vscode智能代码提示、预定义编译宏定义示例如下:{"configurations":[{"name":"Win32","includePath":["${workspaceFolder}/**",......
  • 微软常用运行库合集|dll报错必装,Visual C++ 下载安装
    前言MicrosoftVisualC++Redistributable(简称MSVC,VB/VC,系统运行库)是Windows操作系统应用程序的基础类型库组件。此版VisualC++运行库组件合集(微软常用运行库合集)由国内封装爱好者@Dreamcast打包而成,整合VisualC++组件安装包运行库所有版本,提供图形安装界面,可自选更新V......
  • C++学习随笔——简单的单例设计模式实例
    点击查看代码#include<iostream>classSingleton{private://私有化构造函数,防止外部实例化Singleton(){std::cout<<"SingletonInstanceCreated!"<<std::endl;}//删除拷贝构造函数和赋值运算符,防止拷贝实例Singleton(constSin......