注册 登录
编程论坛 C++教室

类中构造函数问题

tangwen88 发布于 2008-11-19 13:23, 760 次点击
#include <iostream.h>
const float pi=3.14159;
const float fenceprice=35;
const float concreteprice=20;
class circle
{float radius;
 public:
    circle(float r);
    float circumference();
    float area();
};
circle::circle(float r)   //没有这句无法运行,请问下这里为什么要这样写?
{radius=r;}                 //radius=r但程序从没给r赋值啊?
float circle::circumference()
{return 2*pi*radius;}
float circle::area()
{return pi*radius*radius;}
void main()
{float radius,fencecost,concretecost;
 cin>>radius;
 circle pool(radius);
 circle poolrim(radius+3);
 fencecost=poolrim.circumference()*fenceprice;
 cout<<"langanqian="<<fencecost;
 concretecost=(poolrim.area()-pool.area())*concreteprice;
 cout<<"ludaoqian="<<concretecost<<endl;
}
问题在程序里
4 回复
#2
hitcolder2008-11-19 17:15
circle::circle(float r)   //没有这句无法运行,请问下这里为什么要这样写?
{radius=r;}                 //radius=r但程序从没给r赋值啊?

楼主应该去看看类函数的基本声明问题和构造,析构函数啊:
(1)(circle::circle(float r)   //没有这句无法运行,请问下这里为什么要这样写?)   //没有这句无法运行,请问下这里为什么要这样写?)这是circle类的一个构造函数,是初始化的时候使用的,由于该函数是在类的外面定义的,所以必须要用这样的形式写。如果是在类的里面定义,可以直接写成circle(float r);就可以了。
(2)({radius=r;}                 //radius=r但程序从没给r赋值啊?)  在这里r是个形式参数,在circle::circle(float r) 中已经由float r给定义了,是到时候再主函数里面初始化对象时传递过来的,因此无须初始化。
#3
tangwen882008-11-19 18:13
谢谢了哈
#4
发呆12008-11-19 18:15
呵呵,楼主要是看一下类中关于函数和变量的定义方法就知道了。还有那个r,在主函数中有一个cin>>radius语句,这个r就是通过这个语句从外部输入的。所以不用给r赋值。
#5
lxlx8252008-11-20 11:09
circle::circle(float r)是类外函数定义
radius=r;r是函数定义的形参,在调用的时候才会赋值
1