#include<iostream>
using namespace std;
const double pi=3.14;
class Shape
{
public:
virtual double Area()=0;
virtual double Perimeter() = 0;
};
int main()
{
double r,a,b;
char *s[2]={"Circle:\n","Rectangle:\n"};
cin>>r>>a>>b;
Shape *ptr[]={new Circle(r),new Rectangle(a,b)};
for(int i=0;i<2;i++)
{
cout<<s[i];
cout<<"Area:"<<ptr[i]->Area()<<endl;
cout<<"Perimeter:"<<ptr[i]->Perimeter()<<endl;
}
return 0;
}
class Circle :public Shape
{
private:
double r;
public:
Circle(double rr)
{
r=rr;
}
double Area()
{
return pi*r*r;
}
double Perimete()
{
return 2*pi*r;
}
};
class Rectangle :public Shape
{
private:
double a;
double b;
public:
Rectangle(double a,double b) :a(a),b(b)
{
this->a=a;
this->b=b;
}
double Area()
{
return a*b;
}
double Perimete()
{
return (a+b)*2;
}
};
帮你修改好了
#include <iostream>
using namespace std;
const double pi = 3.14;
class Shape
{
public:
virtual ~Shape() {}
virtual double Area() const = 0;
virtual double Perimeter() const = 0;
};
class Circle : public Shape
{
private:
double _r;
public:
Circle(double r) : _r(r) {}
virtual ~Circle() {}
virtual double Area() const override
{
return pi * _r * _r;
}
virtual double Perimeter() const override
{
return 2.0 * pi * _r;
}
};
class Rectangle : public Shape
{
private:
double _a;
double _b;
public:
Rectangle(double a, double b) : _a(a), _b(b) {}
virtual ~Rectangle() {}
virtual double Area() const override
{
return _a * _b;
}
virtual double Perimeter() const override
{
return (_a + _b) * 2.0;
}
};
int main()
{
double r, a, b;
const char *s[2] = {"Circle:\n", "Rectangle:\n"};
cin >> r >> a >> b;
Shape *ptr[] = {new Circle(r), new Rectangle(a, b)};
for (int i = 0; i < 2; i++)
{
cout << s[i];
cout << "Area:" << ptr[i]->Area() << endl;
cout << "Perimeter:" << ptr[i]->Perimeter() << endl;
delete ptr[i];
}
return 0;
}
那两个类提前定义,否则main函数里无法使用
好了,谢谢两位,我改出来了,另外两个周长函数少写个r
#include<iostream>
using namespace std;
const double pi=3.14;
class Shape
{
public:
virtual double Area()=0;
virtual double Perimeter() = 0;
};
class Circle : public Shape
{
private:
double r;
public:
Circle(double rr) : Shape()
{
r=rr;
}
double virtual Area()
{
return pi * r * r;
}
virtual double Perimeter()
{
return 2.0*pi*r;
}
};
class Rectangle : public Shape
{
private:
double a;
double b;
public:
Rectangle(double aa, double bb) : Shape()
{
a=aa;
b=bb;
}
virtual double Area()
{
return a*b;
}
virtual double Perimeter()
{
return (a+b)*2.0;
}
};
int main()
{
double r,a,b;
char *s[2]={"Circle:\n","Rectangle:\n"};
cin>>r>>a>>b;
Shape *ptr[]={new Circle(r),new Rectangle(a,b)};
for(int i=0;i<2;i++)
{
cout<<s[i];
cout<<"Area:"<<ptr[i]->Area()<<endl;
cout<<"Perimeter:"<<ptr[i]->Perimeter()<<endl;
}
return 0;
}