#include<iostream>
#include<stdlib.h>
using namespace std;
class circle
{
public:
circle();
circle(float);
circle(circle &c);
float area()
{return radius*radius*3.14159;}
float getradius()
{return radius;}
static int getnumofcircle()
{return num;}
private:
float radius;
static int num;
}
int circle::num=0; //编译显示有错误,该怎么改
circle::circle(float r)
{
if(r>0)
radius=r;
else
radius=0;
num++;
}
circle::circle(circle &c)
{
radius=c.radius;
num++;
}
int main()
{
circle c1;
circle c2(10.5);
cout<<"创建对象c3前,共有"<<circle::getnumofcircle()<<"个circle类对象\n";
circle c3=c2;
cout<<"创建对象c3后,共有"<<circle::getnumofcircle()<<"个circle类对象\n";
system("pause");
return 0;
}
①编译不通过,该怎么改
②另外我想问一下,拷贝类的构造函数到底有什么用?
③这是书上的程序,运行结果显示是
"……共有2个……"(省略了)
"……共有3个……"(省略了)
为什么会有"2个" 即 为什么num会自加两次?
我漏了分号,而且少了一段
circle::circle()
{
radius=1.0;
num++;
}
所以请直接帮我解释一下后两个问题,谢谢
那应该就对上了把,
circle c1;调用默认构造函数,num 加1
circle c2(10.5);调用带float参数的构造函数 num再加1
不就是2了?
circle c3=c2;调用拷贝构造函数,num又加了1
由于num是静态数据,所有对象共享,所有一直在加,每个对象都能看得到
我漏了分号,而且少了一段
circle::circle()
{
radius=1.0;
num++;
}
所以请直接帮我解释一下后两个问题,谢谢