| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1077 人关注过本帖
标题:计算圆周长,面积的程序,我的结果是错的 请各位亲们帮我看下可好?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用靠谱的白蓝在2014-6-4 23:42:10的发言:

嗯,编译通过的。

你把半径字段提到public区中,当然通过了,但这合适吗?如果公开了r字段,那么实际上你在main()中不需要借用外部变量r,直接cin >> box1.r就可以了。再翻翻书,看书上是否鼓励公开类的字段。

[ 本帖最后由 TonyDeng 于 2014-6-4 23:49 编辑 ]

授人以渔,不授人以鱼。
2014-06-04 23:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
另外,要注意3.14的魔数,它在代码中出现了两次,这应该引起警惕了,当你要提升圆周率的精度时,要作多处修改,而C++是不推荐用宏常数的。

授人以渔,不授人以鱼。
2014-06-04 23:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
为什么尽量不公开类字段呢?可以考虑一下,作为“圆”这个类,除了直接用半径定义之外,其实还可以用周长和面积来定义,反求半径,当我们写出这样两个构造函数的时候(现在不需要这样的构造函数不等于将来永远不需要),就反过来在这两个函数中设定半径,这样若你公开了半径可被外部任意读写,就可能在设定了周长的前提下把半径改了导致与原先的周长不符。无论如何,一个具体的圆对象一旦创建,它就是稳定的,半径不需要公开(宁可写一个公开的返回半径方法获取私有变量的值也不要随意公开类内字段),改变半径的圆就另外创建一个圆对象实例,如果真要改当前对象的参数,就用公开的设置半径方法,而把是在外部直接读写对象字段——这是为了保持类行为和对外接口不变而应该遵守的原则,在内部怎么修改代码都不至于影响使用类的程序员的感觉。

举个例子,我上面的代码,带参构造函数就是需要修改的,因为它没有判断非法的半径值(比如负数),而要追加这个需求,不需要在min()函数作判断,交给构造函数就可以了,否则要在外部调用处增加大量的判断代码,那是重复且无趣的劳动,可维护性也差,逻辑不清晰。

授人以渔,不授人以鱼。
2014-06-05 00:20
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:2 
girth(), area()两个运行时未载入参数r
试增加一下:
class Box
{
public:
  SetRadius(radius){r=radius;}
}
...
void main(){
cin>>r;
Box box1;
box1.SetRadius(r);//楼主先前的代码应该是由于缺少了这一步从而无法将半径值传递到函数里。
...
}
2014-06-05 10:49
gobraves
Rank: 2
等 级:论坛游民
帖 子:46
专家分:16
注 册:2013-8-3
收藏
得分:1 
回复 4 楼 靠谱的白蓝
构造一个类的函数,对r进行赋值
2014-06-05 12:35
kindboy18
Rank: 2
等 级:论坛游民
威 望:1
帖 子:28
专家分:84
注 册:2014-1-24
收藏
得分:0 
版主说的是对的,私有成员必须本类的成员函数才可以访问,这样外部函数都是无法访问的,这样提高了安全性,楼主,你还要好好看书,多练手啊。。。这都是很基础的东西啊
2014-06-05 22:23
快速回复:计算圆周长,面积的程序,我的结果是错的 请各位亲们帮我看下可好?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017268 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved