抛砖引玉:

 c++中private的用处
我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用。
class fun{
public:
void setname(string x)
{
name =x;
}
string getname()
{
return name;
}
private:
string name;
};
/*主函数*/
int main()
{
fun ob;
ob.setname("you are apples");
cout << ob.getname() <<endl; system("pause");
return ;
}

作用说明:

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

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

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

    继上文(AJAX(一)AJAX的简介和基础)作为联系. 传统网页在注册时检测用户名是否被占用,传统的校验显然缓慢笨拙. 当ajax出现后,这种体验有了很大的改观,因为在用户填写表单时,签名的表单项已经 ...

  2. Java学习笔记——SequenceInputStream类合并文件的综合举例分析

    SequenceInputStream 介绍 SequenceInputStream 类表示其他输入流的逻辑串联,即文件的合并. 它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾, ...

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

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

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

    由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...

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

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

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

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  7. 《Linux内核分析》课程第三周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  8. 《Linux内核分析》课程第五周学习总结

    姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  9. JTS空间分析工具包(GIS开源)学习 JAVA

    JST空间分析工具包是一套JAVA API,提供一系列的空间数据分析操作.最近开发项目刚好需要用到,上网搜资料也少,就自己写下来记录一下.C++版本的拓扑分析开源工具叫:geos:.NET版本的拓扑分 ...

随机推荐

  1. Java—重写与重载的区别

    1.重写(Override) 子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除了子类中方法的返回值是父类中方法返回值的子类时)都相同的情况 ...

  2. [原创]Java调用PageOffice在线打开数据库中保存的Word文件

    PageOffice产品和数据库是两个独立的概念,严格来说两者之间没有任何本质关系.PageOffice不依赖数据库而存在,但是数据库和PageOffice可以结合使用来完成某些复杂的业务逻辑.例如: ...

  3. C++面向对象高级编程(下)第二周-Geekband

    17,对象模型:关于vptr(vitrual Pointer)和vtbl(virtual Table) 当存在虚函数就会出现虚指针vptr指向虚函数所在位置vtbl 将vptr实现vtbl内容翻译为C ...

  4. RabbitMQ安装到使用入门

    一.安装erlang1.sudo vim /etc/yum.repos.d/rabbitmq-erlang.repo,将如下内容复制粘贴进去后保存:[rabbitmq-erlang]name=rabb ...

  5. fcc筆記

    在 JavaScript 中所有的变量都是大小写敏感的JavaScript提供七种不同的data types(数据类型),它们是undefined(未定义), null(空), boolean(布尔型 ...

  6. [bzoj2654] tree 最小生成树kruskal+二分

    题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. 输入格式 第一行V,E,need分别表示点数,边数和需要的白色边数.接下来E行, ...

  7. SDF与MDF的区别

    标签: 杂谈   数据库扩展名为.sdf,是一个基于sql server compact edition的数据库文件,不需要安装SQL Server就可以用 基于服务的数据库扩展名为.mdf,是基于S ...

  8. PAT甲级——A1028 List Sorting

    Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...

  9. win7安装mysql8提示one more product requirements have not been satisified

    点击否 然后查看一下到底缺啥,系统版本不一样,缺少的东西也不一定一样 去微软下就是了https://www.microsoft.com/en-us/download/details.aspx?id=4 ...

  10. 【DM8168学习笔记4】ezsdk安装过程记录

    安装文件 ezsdk_dm816x-evm_5_05_02_00_setuplinux DM8168-EZSDK文件结构如图所示.               (图片来自:http://process ...