构造函数的问题???

wjenigma 2002-10-31 10:25:16
在这个求圆环跑道造价的问题中,构造函数的初始化数据成员让我迷惑不已
其中的 :radius(r){} 是什么意思??

#include<iostream.h>
const float PI=(float)3.14; //给出派的值
const float fenceprice=35.; //栅栏的单价
const float concreteprice=20.; //过道水泥单价
class circle //定义类circle及其数据和方法
{
private:
float radius;
public:
circle(float r); //构造函数
float circumference(); //计算圆周长
float area(); //计算圆面积
};
//类的实现

circle::circle(float r):radius(r){} //构造函数初始化数据成员radius

float circle::circumference()
return 2*PI*radius;
}
float circle::area() //计算圆面积
{
return PI*radius*radius;
}
//主函数实现
void main()
{
float radius;
float fencecost,concretecost;
cout<<"\n Enter the radius of the pool:"; //提示用户输入半径
cin>>radius;
circle pool(radius); //定义circle对象
circle poolrim(radius+3);
//计算栅栏造价并输出
fencecost=poolrim.circumference()*fenceprice;
cout<<"\n Fencing cost is $ "<<fencecost;
//计算过道价格并输出
concretecost=(poolrim.area()-pool.area())*concreteprice;
cout<<"\n concrete cost is $ "<<concretecost;
}
...全文
55 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxl_lim 2002-11-04
  • 打赏
  • 举报
回复
成员初使化列表
这样做
circle::circle(float r):radius(r){}
似乎比
circle::circle(float r){radius = r;}
执行快一些
ashchan 2002-11-03
  • 打赏
  • 举报
回复
大家都说了。建议你看看“成员初使化列表”有关的章节,C++ Primer 和 Effective C++ 里都有很好很全面的解释。
LinuxPanther 2002-11-03
  • 打赏
  • 举报
回复
circle::circle(float r):radius(r){}
用的是:成员初始化列表。这个radius要比在构造函数中赋值的数据成员要早
赋值。
而且,
int i(10);
char *s("asdadad");
的方法也是对的!
eee586whg 2002-11-03
  • 打赏
  • 举报
回复
发帖的这位朋友,你也在学c++啊,好象跟我学的书一样 :)
我们的书上也有这个例子,同道中人
n5 2002-11-03
  • 打赏
  • 举报
回复
成员初始化列表,可以在该构造函数被执行之前以列表中给出的值调用其基类,类成员的构造函数,以初始化其基类和类成员。
对于内建类型的data member,例如float,可以直接其构造函数中初始化,
但对于类类型的data member,最好使用成员初始化列表,否则编译器会产生
临时对象,这样子效率就低了
Chris_W 2002-11-02
  • 打赏
  • 举报
回复
circle(float r):radius(r){}

=

circle(float r)
{
radius = r;
}
earphone 2002-11-01
  • 打赏
  • 举报
回复
radius=r
呵,这问题我也问过!
_炳叔_ 2002-11-01
  • 打赏
  • 举报
回复
就是给类成员赋值
相当于radius=r;
不过这种赋值方法只能用于类成员赋值
^_^
justlikearose 2002-11-01
  • 打赏
  • 举报
回复
circle(float r):radius(r){}是用r初始化radius,注意:号后到{号之中是初始化的内容,而{}中的内容不算是初始化,只是构造函数中内容。
Bandry 2002-11-01
  • 打赏
  • 举报
回复
虽然这儿是一样,但是两种初始化的方法是不同的,看看书就知道什么时候该用哪种初始化方法了
sunnytsai 2002-11-01
  • 打赏
  • 举报
回复
:radius(r){}
把r的值赋给radius,初始化成员。
xdp1982 2002-11-01
  • 打赏
  • 举报
回复
初始化数据成员
xiaojunsyiae 2002-10-31
  • 打赏
  • 举报
回复
这是一个典型的数据成员(data member)的初始化的过程,它的意思是在你实例化一个circle对象时,使用的初始化值来给private data member (radius)赋值。
呵呵,看看从C++书上的初始化列表的说法,一般都有说。
  • 打赏
  • 举报
回复
用r初始華radius變量
rshgao 2002-10-31
  • 打赏
  • 举报
回复
俺是老农民,不知道!
zihuilegend 2002-10-31
  • 打赏
  • 举报
回复
circle::circle(float r):radius(r){}

circle::circle(float r){radius=r;}
是一样的,这就是初始化数据成员的方法之一.

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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