C++的类为什么要设定私有这个概念?
外行又看不懂给人源码内行一看就懂难道私有就是为了在几个人集体做某个项目时不给其他程序员看见??如果做成dll后破解,是否公有部分的函数更容易被发现?两个问题,xiezi谢...
外行又看不懂
给人源码内行一看就懂
难道私有就是为了在几个人集体做某个项目时不给其他程序员看见??
如果做成dll 后破解,是否公有部分的函数更容易被发现?
两个问题,xiezi
谢谢 展开
给人源码内行一看就懂
难道私有就是为了在几个人集体做某个项目时不给其他程序员看见??
如果做成dll 后破解,是否公有部分的函数更容易被发现?
两个问题,xiezi
谢谢 展开
4个回答
展开全部
类私有和公有主要为保证类的安全性和封装性的,
防止类在调用时候其中的变量被莫名其妙的修改,
如果是公有变量,那么任何地方都可以直接修改这个类对象的变量,
但是设置完私有以后,只能通过特定的接口函数去修改这个值,
以保证这些私有的变量不被随意的以任何方式改变原来的值。
跟你说的那些没有关系,私有和公有的意思不在于你说的方面。
防止类在调用时候其中的变量被莫名其妙的修改,
如果是公有变量,那么任何地方都可以直接修改这个类对象的变量,
但是设置完私有以后,只能通过特定的接口函数去修改这个值,
以保证这些私有的变量不被随意的以任何方式改变原来的值。
跟你说的那些没有关系,私有和公有的意思不在于你说的方面。
更多追问追答
追问
既然需要为私有数据成员赋值,还弄个公有函数来调用赋值,这不是多此一举吗?
类内的变量,即使是公有,不用对象调用也不会与其他类、函数等变量相混淆,一个程序不论多大,只要一个人写的,他总能知道自己的程序是在做什么吧?
难道不是为了防人吗?
追答
在一般情况下,我们可以将类的数据成员设置为私有的,然后调用类中的公共该接口函数来访问他们。这样做的好处是将数据的赋值与读取分开操作,赋值函数不需要考虑读取函数是如何工作的,读取函数中的代码改变也不会影响到相应的赋值函数。那么这样就提高了代码的可重用性。另外,由于将数据成员进行了私有化,那么各个对象不可以直接访问并修改数据。想要直接修改私有成员变量的数值就是不合法的,只有通过公共的接口函数才能访问并且修改到类里面的私有数据成员。
这样的设置时程序更容易维护,并且可避免一些不应有的错误。
一个程序不可能只像你开始学习时候的那样只有几百行之类的,后期制作的程序动辄都是以万行为单位算的,写成私有与公有区别防止别人只是很简单的一部分,防止别人的话只用C的代码就能实现,关键还是为了防止自己,以及程序的层次性,代码的可重用性等等。
展开全部
一个类,除了有成员函数之外还有成员变量
为什么要有私有成员?
举一个最简单的例子:
假如你封装了一个类用来求矩形面积的
有两个成员函数setx() 和sety()用来设置长和宽
然后调用calc()求面积,然后用printarea()输出结果
这种情况下你就需要在你的类里面设置一个 面积 的成员变量吧?而这个变量你不希望别人可以修改,对吧?因为别人在调用calc之后修改了 面积成员变量是不是你的类结果就不对了?
MFC中每一个控件都有自己维护的成员变量,这些变量在封装的过程中不希望使用这些类的程序去修改,,这个时候就要设置为私有!
如果做成dll 后破解,是否公有部分的函数更容易被发现?
这个纯属扯谈
公有私有保护成员的访问是编译初期做的
说白了是预编译阶段检查的
public private 跟protect这些关键字对生成的可执行文件一点影响都没有
不信楼主试试写个小东西试试,然后计算下exe的hash
为什么要有私有成员?
举一个最简单的例子:
假如你封装了一个类用来求矩形面积的
有两个成员函数setx() 和sety()用来设置长和宽
然后调用calc()求面积,然后用printarea()输出结果
这种情况下你就需要在你的类里面设置一个 面积 的成员变量吧?而这个变量你不希望别人可以修改,对吧?因为别人在调用calc之后修改了 面积成员变量是不是你的类结果就不对了?
MFC中每一个控件都有自己维护的成员变量,这些变量在封装的过程中不希望使用这些类的程序去修改,,这个时候就要设置为私有!
如果做成dll 后破解,是否公有部分的函数更容易被发现?
这个纯属扯谈
公有私有保护成员的访问是编译初期做的
说白了是预编译阶段检查的
public private 跟protect这些关键字对生成的可执行文件一点影响都没有
不信楼主试试写个小东西试试,然后计算下exe的hash
追问
你说的这个例子有道理,不过程序员既然知道那个成员变量是保存面积值的,他还误用,这不是他犯得错误吗?如果怕别人用,那还不就是为了防人
追答
你说的也是很有道理的
C++的私有类完全是多余的
只能约束编程者
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里设置为私有是为了防止其他函数无意的访问和修改,看源代码设置成私有就能防止别人看见吗?显然你理解错了,不是防止别人,是防止其他函数
更多追问追答
追问
看源码的确防不了,我也说了,内行一看就懂,外行看也白看。
如果为了防止其他函数无意修改,那证明这个人写的有问题啊,这是他犯得错误。
不是说私有是为了封装和隐藏数据嘛,怎么能为了防错呢。这也是我好奇的既然不防人,为什么要隐藏数据?
追答
你不弄成私有的人家直接对象名.xx就可以修改了,如果通过接口函数,接口函数是你自己写的,比如对象名.get(),人家只是可以在你允许的范围内读这个私有成员,不能修改,或者你连这种可以访问私有的接口函数都不给,别人就无法访问了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
私有是项目自己可用,公用是项目之间可用。生dll后公有类是可以被调用项目类实例化并调用。
追问
既然是为了项目之间相互开放需要知道的接口,那不就是为了防人吗?
追答
我这里的项目是指C++中的工程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询