类的属性——数据成员,为什么要设置成私有的?

小湿哥 2012-07-25 08:49:41
突然想起来2个月前面试这家公司的时候,老板曾问过我这样一个问题。


当时是老板让我谈谈对于面向对象的理解,我就随便说了一通,说类都有自己的属性,这些属性通过数据成员来体现,一般都设为private的。

老板就问,为什么要设成私有的?公有的,大家都可以用不好么??

当时我就有点语塞了,就说属性不可以被被随便修改,必须是成员函数构造函数才能修改。老板又问,为什么还要额外写一些成员函数去修改数据成员呢,直接改不是更好,那你告诉我,为什么不能被外界直接访问?。..


记得当时我也没回答出来,现在想起来了,求问一下,目测应该也不是三言两语的事情哦。
...全文
2313 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2012-08-02
  • 打赏
  • 举报
回复
老实说,要理解这个要满足下面其中一个条件:

1.经验
2.天份
3.看书
iamnobody 2012-08-02
  • 打赏
  • 举报
回复
睡不着,再说两句:
"类都有自己的属性"
这句话在C++中是不对的.
属性是一种抽象. 成员函数和成员变量等类的成员是它的实现.
c++没有像其他语言一样类的属性这一概念.但是可以实现这个.

同样,接口也是类似的.

lakerszhy 2012-08-01
  • 打赏
  • 举报
回复
封装,就这么简单
nice_cxf 2012-07-25
  • 打赏
  • 举报
回复
不就是封装么?
lttzwz 2012-07-25
  • 打赏
  • 举报
回复
毛钱啊,这是明显把你往沟里带,封装就是这么回事吧
lttzwz 2012-07-25
  • 打赏
  • 举报
回复
这种问题只有老板才问的出来,按按按按哪,随便一逛就逛到才导你的帖子,缘分
xiaoyu_code 2012-07-25
  • 打赏
  • 举报
回复 2
[Quote=引用 5 楼 的回复:]

你可以直接告诉他,把你的工资拿出来大家一起用不是很好吗??
[/Quote]

++
pathuang68 2012-07-25
  • 打赏
  • 举报
回复
之所以设为private,就是不想让外部的代码直接调用。比如一个类中有10个成员变量,其中有9个是用于保存中间状态的,根本不需向外部输出,另外一个变量需要根据这个9个变量的值,才可以得出结果...还有私有成员函数,只供内部的其它成员函数调用...
Xomic 2012-07-25
  • 打赏
  • 举报
回复
两个字“封装”
Defonds 2012-07-25
  • 打赏
  • 举报
回复
这是封装,内部透明,对外不透明。
我可以给你接口访问,但你不能直接访问该属性。
你并不知道访问是如何实现的。
中才德创 2012-07-25
  • 打赏
  • 举报
回复
成员变量私有,成员函数公有。

将操作集约化,以后出了问题,容易把控或修改。
olderma 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

为了封装,为了分模块,为了用接口把作者和用户隔离开来,为了让大家只专心自己那一块就好不用去管自己不该管的
[/Quote]
就是这么多了
baichi4141 2012-07-25
  • 打赏
  • 举报
回复
为了封装,为了分模块,为了用接口把作者和用户隔离开来,为了让大家只专心自己那一块就好不用去管自己不该管的
你要能力强到可以用汇编语言写出任何大程序,什么封装继承多态你都不用管——等你一走,这些程序全部作废,因为除你之外谁都看不懂
W170532934 2012-07-25
  • 打赏
  • 举报
回复 1
你可以直接告诉他,把你的工资拿出来大家一起用不是很好吗??
孙立人315 2012-07-25
  • 打赏
  • 举报
回复
也防止类的属性被随意修改阿
路过少年 2012-07-25
  • 打赏
  • 举报
回复
楼上解释不错,只因为这个原因?
lirunfa 2012-07-25
  • 打赏
  • 举报
回复
把可以让别人访问和修改的,以接口的形式公开,接口的好处在于,别人依赖你的接口,而不是依赖你具体的实现,那么你修改了这个接口的实现,别人那边不需要改,举个例子。

你的类中有一个方法int getCount(){return this->count;};
别人某个地方使用了你这个getCount, 然后有一天你改了实现例如{return this->count * 2;};别人的代码不需要改就可以编译通过。
IVERS0N 2012-07-25
  • 打赏
  • 举报
回复
因为对于使用这个类的人你不需要了解内部实现,封装隐藏起来
thefutureisour 2012-07-25
  • 打赏
  • 举报
回复
这样可以类的用户不关心类的实现,只使用接口就行了,如果类的实现变了,但是接口没变,类的用户就可以不用修改自己的代码,程序也能运行。
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基 2.3.2.1 什么是抽象基(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现厂对象 3.3.2 厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧