有关圆类的包含,不懂circle::circle(circle &s):p(s.p)中p(s.p)的含义

w26hu 2014-05-12 10:38:41
见下
#include<iostream.h>
#include<iomanip.h>
const float PI=3.14159;
class point
{
public:
point(int a=0, int b=0);
point(point &p);
~point();
void display(void);
void move(int xx,int yy);
private:
int x;
int y;
};

point::point(int a,int b)
{
x=a;
y=b;
cout<<"point<<endl;
}
point::~point()
{
cout<<"point<<endl;
}
point::point(point &p)
{
x=p.x;
y=p.y;
cout<<"point"<<endl;
}
void point::display(void)
{
cout<<"x="<<x<<" y="<<y<<endl;
}
void point::move(int xx,int yy)
{
x+=xx;
y+=yy;
}
class circle
{
public:
circle(int a=0,int b=0,float c=1);
circle(circle &s);
~circle();
void display(void);
float get_cum();
float get_area();
private:
point p;
float r;
};

circle::circle(int a,int b,float c):p(a,b)
{
if(c<=0)
r=1;
else
r=c;
cout<<"circle<<endl;
}
circle::circle(circle &s):p(s.p)
{
r=s.r;
cout<<"circle"<<endl;
}
circle::~circle()
{
cout<<"circle<<endl;
}
void circle::display(void)
{
p.display();
cout<<"r="<<r<<endl;
}
float circle::get_cum()
{
return (2*PI*r);
}
float circle::get_area()
{
return (PI*r*r);
}

int main ()
{
int a,b;
float c;
cout<<";
cin>>a>>b;
cout<<
cin>>c;
circle t(a,b,c);
t.display();
cout"<<setw(6)<<setprecision(3)<<t.get_cum()
<<setw(6)<<setprecision(3)<<t.get_area()<<endl;
return(0);
}
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu4357815 2014-05-13
  • 打赏
  • 举报
回复

circle::circle(circle &s):p(s.p) //这其实就是一个复制构造函数,其实p(s.p)就是类的组合。简单点说就是
                                                       //把调用p的复制构造函数,把s中p的复制一下。
{
  r=s.r; 
  cout<<"circle"<<endl;
}
漂浮一生 2014-05-13
  • 打赏
  • 举报
回复
要多调试啊,你在主函数中声明两个circle类的对象,用一个circle对象初始化另一circle对象时, 会调用circle的拷贝构造函数circle(circle &s),但又发现里面有另一个类的对象, 那么会去调用另一个point类的拷贝构造函数point(point &p);
buyong 2014-05-13
  • 打赏
  • 举报
回复
吧p变量初始化为s.p
sniffer12345 2014-05-13
  • 打赏
  • 举报
回复
你可以把: circle::circle(circle &s):p(s.p) { r=s.r; cout<<"circle"<<endl; } 改成 circle::circle(circle &s) { p = s.p; r=s.r; cout<<"circle"<<endl; } 试试,然后观察cout<<"point"<<endl;这一句输出的内容

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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