ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C/C++编程笔记:访问修饰符丨Public、Private和Protected

2021-04-10 20:30:20  阅读:209  来源: 互联网

标签:编程 函数 私有 成员 修饰符 Private 访问 Protected


访问修饰符用于实现称为数据隐藏的面向对象编程的重要方面。考虑一个真实的例子: 

拥有10名核心成员的研究与分析部门(R&AW)拥有有关国家安全的敏感机密信息。现在,我们可以将这些核心成员核心化为类的数据成员或成员函数,而这些成员又可以与R&A部门相关联。这10个成员可以直接从其所属部门(班级)访问机密信息,但是除这10个成员之外,任何人都不能直接访问此信息,即,除班级中普遍存在的那些外部功能外,其他人不能访问未授权的信息。既不具有分配的特权(例如,朋友类和继承的类所拥有的特权,如以后将在本文中看到的那样),也没有访问被允许直接访问机密信息的这10个成员之一(类似于可以通过直接访问私有成员的类的公共成员函数在外部访问该类)。这就是实践中的数据隐藏。 

访问修饰符或访问说明在类用于分配的辅助功能的类成员。也就是说,它对类成员设置了一些限制,使其不能被外部函数直接访问。

C ++中提供了3种类型的访问修饰符: 

Public

Private

Protected

注意:如果我们没有为类内的成员指定任何访问修饰符,则默认情况下,成员的访问修饰符将为Private

现在让我们详细了解这些访问修饰符:

1. Public:在公共说明符下声明的所有类成员将对所有人开放。声明为public的数据成员和成员函数也可以由其他类和函数访问。可以使用具有该类对象的直接成员访问运算符(。)从程序中的任何位置访问该类的公共成员。 

例子:

输出:

半径是:5.5

面积是:94.985

在上面的程序中,数据成员半径声明为public,因此可以在类外部访问它,因此可以从main()内部访问它。 

2.私有:声明为私有的类成员只能由该类内部的成员函数访问。类之外的任何对象或函数都不允许直接访问它们。只允许成员函数或朋友函数访问类的私有数据成员。 

例子:

输出: 

在函数'int main()'中:11 : 16:错误:'double Circle :: radius'是私有的

        double半径;                

^ 31:9:错误:在此上下文中

    obj.radius = 1.5;          ^

上面程序的输出是编译时错误,因为不允许我们直接在类外部访问类的私有数据成员。但是尝试访问obj.radius,radius是私有数据成员,我们得到了编译错误。 

但是,我们可以使用类的公共成员函数间接访问类的私有数据成员。 

例子: 

输出: 

半径是:1.5

面积是:7.065

3.受保护的:受保护的访问修饰符与私有访问修饰符类似,除非不能在朋友类的帮助下,否则不能在其类之外进行访问,区别在于声明为受保护的类成员可以由任何人访问该类的subclass(派生类)。 

注意:这种通过继承进行的访问可以根据继承模式来更改派生类中基类元素的访问修饰符。

例子:

输出: 

id_protected是:81

以上就是今天的分享内容!每天学点小知识,希望对你有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群:765803539点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

标签:编程,函数,私有,成员,修饰符,Private,访问,Protected
来源: https://blog.csdn.net/qq_42366672/article/details/115582227

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有