C语言的一个编程题,求救

2024-11-17 17:47:49
推荐回答(2个)
回答1:

#include
using namespace std;

class Shape
{
public:
virtual float getArea()=0;//定义为纯虚函数,带有纯虚函数的类是抽象类
virtual float getPerim()=0;/*抽象类的作用:通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态性
声明为纯虚函数之后,基类中就可以不再给出函数的实现部分,纯虚函数的函数体由派生类给出*/

protected://声明为私有成员,则在派生类中无法使用
int x;
int y;
float radius;
};

class Rectangle:public Shape
{
public:
Rectangle(int xx,int yy);
float getArea()
{
return x*y;
}
float getPerim()
{
return 2*x+2*y;
}

};
Rectangle::Rectangle(int xx,int yy)
{
x=xx;
y=yy;
}

class Circle:public Shape
{
public:
Circle(float r);
float getArea()
{
return 3*radius*radius;
}
float getPerim()
{
return 2*3*radius;
}
};
Circle::Circle(float r)
{
radius=r;
}

int main()
{
Shape *p;//抽象类不能实例化,即不能定义一个抽象类的对象,但是可以定义一个抽象类的指针和引用,通过指针或引用,就可以指向并访问派生类对象,进而访问派生类的成员,这种访问时具有多态性特征的
p=new Rectangle(10,20);
cout<<"矩形面积:"<getArea()< cout<<"矩形周长:"<getPerim()< delete p;
p=new Circle(5);
cout<<"圆形面积:"<getArea()< cout<<"圆形周长:"<getPerim()< delete p;
return 0;
}

回答2:

#include
using namespace std;
class rectangle
{
public:
rectangle(double L, double W):l(L),w(W){}
double getCir();
double getArea();
private:
double l;
double w;
};

double rectangle::getCir()
{
return 2 * (l + w);
}

double rectangle::getArea()
{
return l * w;
}

void main()
{
double l, w;
cout << "长:";
cin >> l;
cout << "宽:";
cin >> w;
rectangle r(l, w);
cout << "周长:" << r.getCir() << endl;
cout << "面积:" << r.getArea() << endl;
}