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

[求助]请教大家一个问题

modelmomo 发布于 2007-04-19 07:58, 1187 次点击
定义一个抽象类CShape,包含纯虚函数Area()(用于计算面积)和SetData()(用于重设形状大小),然后派生出三角形Ctriangle类, 矩形CRect 类,圆CCircle类,分别求其面积。最后定义一个CArea类,计算几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置,编写一个完整的程序。

我的问题在于CArea类,题目中要求定义一个CArea类并且它的构造函数或者成员可以设置其他几个类的成员变量。我想问一下怎么实现这一过程。想了很久,没想出来,高手勿批评我不加思考就像要答案。最后我承认这是老师布置的作业
8 回复
#2
aipb20072007-04-19 10:02
class CArea{
public:
CArea(//参数传递几个图形类);
//////////
//////////
private:
//声明图形类作为成员,接受传递的实参
}
#3
modelmomo2007-04-19 10:18

那如果我要有两个CCircle类实例对象,一个CRect类实例对象。。。
像这样的情况你怎么用CArea的构造函数?

#4
aipb20072007-04-19 10:27
就在构造函数里为每个图形类加一个表示个数的型参。
#5
modelmomo2007-04-19 10:35
不懂怎么实现,具体一点,谢谢
#6
aipb20072007-04-19 10:55
class CArea{
public:
CArea(//参数增加3个图形类的个数int cir = 0,int rec = 0,int tri = 0);
//////////
void compute(); //根据传递图形的个数计算面积和
//如CArea sum(……//1,2);
//sum.compute();就计算出1个圆,2个矩形的面积和
//////////
private:
//声明图形类作为成员,接受传递的实参
int nbr_cir,nbr_rec,nbr_tri; //增加的数据成员
}
#7
modelmomo2007-04-19 11:50
噗。。。。
还是不明白
主要还是CArea的构造函数问题要符合题目要求不懂怎么实现
楼上要是可以的话能不能把这个完整的程序写出来。。。
谢谢俄
#8
游乐园2007-04-19 14:05

#include<iostream>
using namespace std;

class Cshape
{
public:
virtual float Area()=0;
//virtual void SetData(int,int)=0;
};

class CTriangle :public Cshape
{
int vect;
public:
CTriangle(int v):vect(v) {}
float Area() {return vect*1.732/4;}
//void SetData(int,int) {}

};

class CRect:public Cshape
{
int length,height;
public:
CRect(int l,int h):length(l),height(h) {}
float Area() {return length*height;}
//void SetData(int,int){}
};

class CCircle:public Cshape
{
int radius;
public:
CCircle(int r):radius(r) {}
float Area() {return 3.14*radius*radius;}
//void SetData(int,int) {}
};

class Area
{
CTriangle t;
CRect r;
CCircle c;
public:
Area(int v,int l,int h,int r):t(v),r(l,h),c(r) {}
float sum() {return t.Area()+r.Area()+c.Area();}
};

int main()
{
Area a(10,20,30,5);
cout<<a.sum()<<endl;
return 0;
}

#9
song42007-04-19 20:18
Area是FRIEND不可以么
里面有一个重载的函数用来改变参数
然后一个函数用虚函数实现
到时用参数确定操作对象
来完成面积运算
1