请大侠帮忙啊。。。如何改正啊?在线等。。。万分感谢。。。

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:00:05
#include<iostream>
using namespace std;
class shapes{
private:
double x,y,r;
public:
void insquare(double X=0,double Y=0) {x=X;y=Y;}
void incircle(double R=0) {r=R;}
double getx(){return x;}
double gety(){return y;}
double getr(){return r;}
virtual double show_area(shapes &)=0;
};

class square:virtual public shapes
{
public:
double show_area(square &s) {return s.getx()*s.gety();}
};

class circle:virtual public shapes
{
public:
double show_area(circle &c) {return 3.14159*c.getr()*c.getr();}
};

int main()
{
shapes s1;
square s2;
circle c;
cout<<"请设置x,y的初值:"<<endl;
s1.insquare(3,4);
cout<<"请设置r的初值:"<<endl;
s1.incircle(5);
cout<<"矩形的面积为:"<<s2.show_area(s2)<<endl;
cout<<"圆的面积为:"<<c.show_area(c)&

包含纯虚函数的类称为抽象类,不可被实例化,即不可用来定义对象。shapes就是那样的类,它内部包含了show_area纯虚函数,在main函数中实例shapes类对象是错误的。可以这样该一下:
include<iostream>
using namespace std;

class shapes{
private:
double x,y,r;
public:
void insquare(double X=0,double Y=0) {x=X;y=Y;}
void incircle(double R=0) {r=R;}
double getx(){return x;}
double gety(){return y;}
double getr(){return r;}
virtual double show_area()=0;
};

class square:virtual public shapes
{
public:
double show_area() {return getx() * gety();}
};

class circle:virtual public shapes
{
public:
double show_area() {return 3.14159 * getr() * getr();}
};

int main()
{
// shapes s1;
square s2;
circle c;
cout<<"请设置x,y的初值:"<<endl;
s2.insquare(3, 4);
// s1.insquare(3,4);
cout<<"请设置r的初值:"<<endl;
c.incircle(5);
// s1.incircle(5);<