C++关于继承问题,跪求高手解答

把定义平面直角坐标系上的一个点的类cpoint作为基类,派生出描述一条直线的类cline,再派生出一个矩形类crect。要求成员函数能求出两点间距,矩形周长和面积。程序比... 把定义平面直角坐标系上的一个点的类cpoint作为基类,派生出描述一条直线的类cline,再派生出一个矩形类crect。要求成员函数能求出两点间距,矩形周长和面积。
程序比较复杂,但是我看了好几天还是不知道错在哪?有劳各位高手不吝赐教,多谢!
#include<iostream>
#include<cmath>
using namespace std;
class cpoint
{
public:
int x,y;
public:
cpoint(int x=0,int y=0)
{
this->x=x;
this->y=y;
}
};
class cline:public cpoint
{
private:
cpoint p1,p2;
public:
cline(int a,int b,int c,int d)
:p1(a,b),p2(c,d)
{}
double length()//求两点间距
{
return sqrt((p2.y-p1.y)*(p2.y-p1.y)+(p2.x-p1.x)*(p2.x-p1.x));
}
};
class crect:public cline
{
private:
cline l1,l2;
public:
crect(int a,int b,int c,int d,int e,int f)
:
l1(a,b,c,d),l2(c,d,e,f)
{}
void girth()
{
cout<<"周长:"<<2*(l1.length()+l2.length()) <<endl;
}
void area()
{
cout<<"面积:"<<l1.length()*l2.length()<<endl;
}
};
int main()
{
crect c(0,0,1,0,1,1);
c.girth();
c.area();
return 0;
}
展开
 我来答
督诺0GMffd
2010-08-14 · TA获得超过2013个赞
知道大有可为答主
回答量:3770
采纳率:0%
帮助的人:2041万
展开全部
错误的根源在于CLIEN没有默认的构造函数。
crect(int a,int b,int c,int d,int e,int f):l1(a,b,c,d),l2(c,d,e,f)这样的赋值方式是错误的。要实现这样的赋值方式,必须保证基类有默认的构造函数
你在cline中能这么用,是因为CPOINT类有一个默认的构造函数。
cpoint(int x=0,int y=0)
{
this->x=x;
this->y=y;
}
如果改为
cpoint(int x,int y)
{
this->x=x;
this->y=y;
}
同样会报错。
百度网友6205bc1
2010-08-14 · TA获得超过6004个赞
知道大有可为答主
回答量:5933
采纳率:20%
帮助的人:2724万
展开全部
class cline:public cpoint
{
private:
cpoint p1,p2;
public:
cline(){}
cline(int a,int b,int c,int d)
:p1(a,b),p2(c,d)
{}
没有可用的默认构造函数,导致出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冷月_linux
2010-08-14
知道答主
回答量:18
采纳率:0%
帮助的人:6万
展开全部
为Cline定义一个带有默认参数的构造函数即可,完整源代码如下,vc6.0测试通过。
#include<iostream>
#include<cmath>
using namespace std;
class cpoint
{
public:
int x,y;
public:
cpoint(int x=0,int y=0)
{
this->x=x;
this->y=y;
}
};
class cline:public cpoint
{
private:
cpoint p1,p2;
public:
cline(int a = 0,int b = 0,int c = 0,int d = 0)
:p1(a,b),p2(c,d)
{}
double length()//求两点间距
{
return sqrt((p2.y-p1.y)*(p2.y-p1.y)+(p2.x-p1.x)*(p2.x-p1.x));
}
};
class crect:public cline
{
private:
cline l1,l2;
public:
crect(int a,int b,int c,int d,int e,int f)
:
l1(a,b,c,d),l2(c,d,e,f)
{}
void girth()
{
cout<<"周长:"<<2*(l1.length()+l2.length()) <<endl;
}
void area()
{
cout<<"面积:"<<l1.length()*l2.length()<<endl;
}
};
int main()
{
crect c(0,0,1,0,1,1);
c.girth();
c.area();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
super_xuan
2010-08-14
知道答主
回答量:13
采纳率:0%
帮助的人:15.3万
展开全部
在cline类中,cpoint p1,p2需要调用cpoint的默认构造函数cpoint(),而你在cpoint中定义了自己的构造函数导致该默认构造函数失效,所以你需要在cpoint中补上该默认构造函数,而crect中cline同理也是。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式