举例分析private的作用【c/c++学习】

抛砖引玉:

 1 c++中private的用处
 2 我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用。
 3 class fun{
 4 public:
 5     void setname(string x)
 6 {
 7     name =x;
 8 }
 9 string getname()
10 {
11     return name;
12 }
13 private:
14     string name;
15 };
16 /*主函数*/
17 int main()
18 {
19 fun ob;
20 ob.setname("you are apples");
21 cout << ob.getname() <<endl;
22
23 system("pause");
24 return 0;
25 }

作用说明:

【way 1】

这是面向对象编程中的东西。

首先你要有一个类的概念,如果没有类的概念,就不会知道为什么需要private、protected和public。

类首先是一种抽象,是一个定义。比如说人类就是一个抽象的定义,具体到我们每个人就是这个类的对象。虽然你我都属于人类,但可能我们姓名不同,性别不同,年龄也不同,因此类需要有属性。除了属性,类还需要有方法,类的方法是这个类对外所提供的交互接口。例如人类可以对外提供走路、说话、吃饭等方法。类的属性通常会声明为private,也就是私有的,然后提供一个公有的方法来访问它。你不理解的其实就是这里,不知道为何要“多此一举”,直接将属性声明为public,直接访问不就可以了吗?

其实,从程序编译的角度来讲这么做是没有问题的,只是,从面向对象的角度来讲,有三个重要的概念,分别是封装、继承和多态。如果将类的属性直接以public的形式对外暴露,实际上就丧失了封装性。什么是封装?封装就是让内部细节对外不可见。类的一个设计原则就是,不要把自己的内部实现细节对外暴露,只对外提供一个功能接口,也就是公有的方法,至于类这个方法里面具体是怎么实现的,外部不需要知道也不应该知道。就以你代码里setname这个方法为例,一个完整的名字应该包括姓和名。假如说你规定姓在前名在后,中间用一个空格来分割。那么如果使用setname方法,你就可以在setname时对外部输入的名字进行检查,看看中间是不是有个空格,如果没有的话可能需要返回一个设置失败

。另外,类的内部,可能是使用一个string类型的变量name来直接保存姓和名,也可以定义2个string变量,一个用来保存姓一个用来保存名,可以在setname方法中将用户的输入以空格拆开,分别填到这2个变量里。可见,就一个简单的setname,其实你类的内部,可以用不同的方法来实现。但是这种实现的差异,对于类的使用者来说是不关系的,类的使用者只需要知道它可以调用setname来设置名字就可以了,而无需关心你这个类里面究竟是用一个string对象还是两个string对象来保存名字。这其实就是一个封装。如果你直接以public类型对外提供名字属性,你实际上就丧失了封装性,因为你把内部的实现细节暴露给了外部。

相信,你应该明白了很多。

【way 2】

简单来说就是编写大工程的时候有用,刚学c++的人会很迷惑,因为你用不到,而且还麻烦,不如公有的方便。
但是大工程上是避免出错的好方法。因为你写了一个软件,跟第三方合作开发,计算工资的部分你这里把关,可是第三方的人如果可以操作你内部数据,他直接修改了工资的值,你就亏了,所以你要把工资这个变量设为私有的,这样第三方的人就不能直接修改你的值了。

原文地址:https://www.cnblogs.com/leime/p/9490866.html

时间: 2024-11-08 23:49:10

举例分析private的作用【c/c++学习】的相关文章

接口举例分析

接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体.接口体现了程序设计的多态和高内聚低耦合的设计思想. 接口——注意事项 <1> 接口不能被实例化 <2> 接口中的所有方法都不能有主体,如void aaa(){  } :抽象类中抽象方法不能有主体,而非抽象方法可以有主体!!! <3> 一个类可以有多个接口 <4> 接口中可以有变量,但变量不能用private和protected修饰 A. 接口中的变量,本质上都是static的

AJAX练习(一):制作可以自动校验的表单(从原理上分析ajax的作用)

继上文(AJAX(一)AJAX的简介和基础)作为联系. 传统网页在注册时检测用户名是否被占用,传统的校验显然缓慢笨拙. 当ajax出现后,这种体验有了很大的改观,因为在用户填写表单时,签名的表单项已经发送给了服务器,然后根据用户填写好的内容进行数据查询.在查询号无需页面刷新就自动给了提示.类似这样的应用大大的提高了用户的体验,本节简单介绍自动校验表单制作方法.从原理上分析ajax的作用. 1.搭建框架 首先为html框架 <form name="register"> <

【ThinkingInC++】29、探讨private的作用

/** * 功能:探讨private的作用 * 时间:2014年8月20日16:12:35 * 作者:cutter_point */ struct B { private: char j; float f; public: int i; void func(); }; void B::func() { i=0; j='0'; f=0.0; } int main() { B b; b.i=1; // b.j='1'; error:这个是private类型的,外部访问会报错 // b.f=1.0;

《Linux内核分析》课程第七周学习总结

姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 学习内容:Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接,编程练习动态链接库的这两种使用方式: 使用gdb跟踪分析一个execve系统调用内核处

调节技术术语和部分传递系统的举例分析

1.模拟信号:4种例子:数字信号:有限且离散信息参数取值的信号2.起模拟作用的传递环节或系统的特征:模拟输出信号再现模拟输入信号(信号必须不存在线性关系......?)3.传输周期:nt小于等于采样周期4.采样保持环节产生的误差:时间移位1/2采样周期.平均幅值偏差1/2分辨率                          *5.采样周期为调节回路中最小应处理延迟时间的1/2,                                                        * 

《Linux内核分析》课程第八周学习总结

姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 一.进程调度与进程切换 (一)不同的进程有不同的调度需求   第一种分类: I/O密集型(I/O-bound) 频繁的进行I/O 通常会花费很多时间等待I/O操作的完成 CPU密集型(CPU-bound) 计算密集型 需要大量的CPU时间进行运算 第二种分类: 批处理进程 不必与用

Spring 框架的架包分析、功能作用、优点,及jar架包简介

Spring 框架的架包详解    Spring的作用     Spring的优势 由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关jar的作用.关系.这篇文章总结一下spring框架的相关知识. 一.spirng的简介(高手可以跳过) Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Sprin

网站日志分析诊断及其作用

相信大家都知道网站日志是什么东西,可是做SEO的有多少人会去关注分析网站日志呢,又有多少SEOer能看懂网站日志呢?今天就给大家讲解下在网站SEO优化中,怎样利用网站日志的诊断和分析来提高网站关键词的排名. 首先我们仙说下网站日志分析的作用,对于一个刚上线的网站,我们能分析出来搜索引擎蜘蛛抓取的情况:如果网站长时间收录有问题,那么我们也可以对比网站日志中的搜索引擎蜘蛛行为,来了解网站是哪方面出了问题:如果网站被封,或者被K,我们都可以通过观察网站日志的情况来了解原因处在什地方. 网站日志又称蜘蛛

Spring MVC 框架的架包分析,功能作用,优点

由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关jar的作用.关系.这篇文章总结一下spring框架的相关知识. 一.spirng的简介(高手可以跳过) Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的