首页 > 编程语言 >C++访问限定符private、public、protected的使用场景

C++访问限定符private、public、protected的使用场景

时间:2024-06-04 12:59:27浏览次数:26  
标签:函数 子类 成员 C++ 访问 protected private

众所周知,C++中有3种访问符,分别是private、public、protected。

其中private和public比较好理解。

private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,更不能由该类的对象在类外进行访问,类成员变量一般修饰为private,防止类使用者不受约束地直接修改数据。

public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象在类外访问。需要提供给外部使用者的成员函数一般修饰为public,这样外部使用者可以通过对象来进行调用。某些成员函数有时候也修饰为private,方便类的编写者在编写其它成员函数需要实现某些稍微复杂的功能时去调用它,而它是无需被外部使用者所了解的,因此这样的成员函数被修饰为private。

protected:可以被该类中的函数、子类的函数、以及其友元函数访问,但是不能由该类对象在类外进行访问。

那么问题来了,protected在什么情况下使用呢?

说到protected,就不得不提到C++面向对象的一大特性:继承。如果没有继承这个机制,也就没有protected存在的意义。

需要继承给子类去调用的函数我们通常将其修饰为protected,子类的成员函数在实现自己功能的时候,可能会使用到父类修饰的成员函数。那么在继承的时候,父类的成员函数会提供给自己的子类,而这样的成员函数是不需要由外部使用者知道的,前面说过不需要由外部使用者知道的成员函数我们封装为private,但是由于要继承给子类,private函数继承给子类之后,其访问权限就变成不可访问了,而如果将这样的函数封装为protected,继承给子类之后,只要不是私有继承,其访问权限依然是protected,这样父类protected成员函数继承给子类后,子类就可以访问了,而且protected函数不能由对象在类外调用,保持了类对外接口的简洁性,即只将类的基本功能通过public成员函数作为接口提供给外部使用者去使用。

为什么不直接把这样的成员用public修饰呢?

正如前面所说,用protected修饰成员函数可以保持类对外使用的简洁性。

这里我们可以做一个总结:类只需要把自己的基本功能通过public成员函数作为接口提供给外部使用者。而不需要提供给外部使用者的函数,我们根据情况来设定它的访问限定符。如果仅仅只是本类成员函数要去调用的函数,我们可以封装为private,如果该函数需要继承给子类去调用,那么就将其封装为protected。这样做可以保持类对外使用的简洁性。

友元还有一个值得注意得地方,上面所说的友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数。

                        
学习链接:https://blog.csdn.net/weixin_44049823/article/details/128865866

标签:函数,子类,成员,C++,访问,protected,private
From: https://blog.csdn.net/2301_78986604/article/details/139420396

相关文章

  • C++派生类与继承性
    继承和派生其实都是一回事,只是说法不同罢了。        如:子类继承了父类,父类派生了子类。那么什么是继承呢 首先,如上图所示是一个动物种类区分图。猫和狗都属于动物这一种类,而猫又可以细分为加菲猫、布偶猫等种类。我们发现这些细分出来的单体在拥有上一级别的共性......
  • 【第二节】C/C++数据结构之线性表
    目录一、线性表基本说明1.1基本概念1.2抽象数据类型1.3存储结构1.4插入与删除的区别1.5顺序存储和链式存储的优缺点二、链表2.1基本概念2.2抽象数据类型2.3单链表的定义2.4单链表的基本操作2.5单链表模板形式的类定义与实现三、单向循环链表四、双链表......
  • visual studio 2019 c++与汇编混合代码
    1、visualstudio2019下x64架构的CPU配置不支持内联汇编代码的嵌入,即不支持__asm{}语句。2、通过创建.asm汇编代码文件封装汇编函数的方式实现c++代码调用汇编函数:第一步:修改工程的生成依赖项第二步:创建.asm汇编代码文件第三步:编写汇编代码的函数第四步:在c++文件调用汇编函......
  • c++ 异常处理
     =================================【C++11】std::runtime_error的使用一、概要std::runtime_error:运行时错误异常类,只有在运行时才能检测到的错误,继承于std::exception,它的声明在头文件中。std::runtime_error也用作几个运行时错误异常的基类,包括std::range_error(生成的......
  • C/C++结构体对齐测试
    #include<stddef.h>#include<iostream>structs1{inta;intb;};#pragmapack(8)structs2{charc;inta;doubleb;};structs3{charb[10];doublea;};#pragmaunpackstructs4{c......
  • 小猴编程周赛C++ | 字符串
    学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!附上汇总贴:小猴编程C++|汇总-CSDN博客【题目描述】小猴最近学习了字符串,为了加强对字符串的理解,猴博士特意给小猴安排了一道编程题:给定一个字符串s,保证s中只包含大写字母(AZ......
  • 小猴编程周赛C++ | 六面世界
    学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!附上汇总贴:小猴编程C++|汇总-CSDN博客【题目描述】六面世界的地图由六边形格子组成,地图一共n行,奇数行有m格,偶数行有m-1格。下图是一个n=5,m=5的地图。小明想从起点S走到终点......
  • 《信息学奥赛一本通 编程启蒙C++版》3126-3130(5题)
    3126:练21.3 神奇装置信息学奥赛一本通-编程启蒙(C++版)在线评测系统练21.3神奇装置信息学奥赛一本通-编程启蒙(C++版)在线评测系统3126:练21.3神奇装置_哔哩哔哩_bilibili#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b,c,d; cin>>a>>b>>c......
  • 《信息学奥赛一本通 编程启蒙C++版》3001-3280
    《信息学奥赛一本通编程启蒙C++版》3001-3005(5题)《信息学奥赛一本通编程启蒙C++版》3001-3005(5题)-CSDN博客《信息学奥赛一本通编程启蒙C++版》3006-3010(5题)《信息学奥赛一本通编程启蒙C++版》3006-3010(5题)-CSDN博客《信息学奥赛一本通编程启蒙C++版》3011-3015......
  • C/C++ for 语句的要点与注意事项
    C/C++中的 for 语句是一种常用的循环结构,用于重复执行一段代码,直到满足某个条件为止。以下是 for 语句的要点与注意事项:要点:基本语法:for 语句的基本语法为 for(initialization;condition;update){body_of_loop}。initialization:初始化循环控制变量。condition......