永发信息网

C++面向对象程序中,既然类外私有变量的使用受限制,为何不都定义为公共变量,省的使用私有变量时那么麻烦

答案:2  悬赏:80  手机版
解决时间 2021-01-02 22:16
  • 提问者网友:情歌越听越心酸
  • 2021-01-02 17:38
C++面向对象程序中,既然类外私有变量的使用受限制,为何不都定义为公共变量,省的使用私有变量时那么麻烦
最佳答案
  • 五星知识达人网友:妄饮晩冬酒
  • 2021-01-10 05:48
举个例子给你说明吧,比如现在你要做一个具有计算球的体积功能的类。
假如这个类我们已经写好了,它名为VClass。
那么我们现在要计算体积了
VClass VmyClass;//对象实力
float banjin = 2;//半径
VmyClass.SetBanJin(banjin);//调用类初始化半径
float Tiji = VmyClass.GetTiji();//得出该半径求的体积
前面调用到的两个函数,应该都必须是public的,因为别人要调用这两个函数去得到自己想要的体积。VClass类里面应该还有很多成员,打个比方吧,假如它有一个成员:float PI=3.141592653;请问我该把这个成员设成私有的还是公共的呢?答案肯定是私有的,因为这样更安全。如果设成公共的,那么我们在别的类里面就可以像这样调用 VmyClass.PI = 1;设想一下PI的值被随意改变后,VClass里面计算球面积的函数肯定会用到这个PI,那么计算出的结果,也就是球的体积肯定就有错误了对吧。这就是一个最简单的私有成员安全性。往往我们实际写代码的过程中函数很多,成员很多,务必要把公共和私有分清楚。要不然很容易造成这样的错误
全部回答
  • 1楼网友:想偏头吻你
  • 2021-01-10 06:58
这个和变量私有与否没关系,你如果仔细看错误提示的话,它会提示不能调用非const成员函数。 void setfunc(const constructfunc & a){j=a.getfunc();} 你这里传进来的参数a是const的,这样只能调用a的const成员函数。 解决办法很简单,将: int getfunc(){return j;} 改为 int getfunc() const {return j;} 即可。 至于拷贝构造函数为什么能访问另一个对象的私有变量,这是因为另一个对象也和自己是同一个类型的,一个类是自己的友元。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯