输出多了9.26841e-315,我不知道什么原因。
#include<iostream>
#include<cmath>
using namespace std;
const double pi=3.14;
class Shape
{
public:
virtual double Area()=0;
virtual double Perimeter() = 0;
};
class Circle:public Shape
{
public:
Circle(double rr);
double Radius(); //获取私有量r值,以便为两个子类所使用
double Area();
double Perimeter();
private:
double r; //圆的半径(也可以将Radius函数去掉,r定义为protected属性,这样在子类中可以直接使用r)
};
class In_Square:public Circle
{
public:
In_Square(double rr);
double Area();
double Perimeter();
};
class Ex_Square:public Circle
{
public:
Ex_Square(double r);
double Area();
double Perimeter();
};
int main()
{
Shape *ptr;
double r;
cin>>r;
ptr=new Circle(r);
cout<<"Circle's area:"<<ptr->Area()<<endl;
cout<<"Circle's perimeter:"<<ptr->Perimeter()<<endl;
ptr=new In_Square(r);
cout<<"In_Square's area:"<<ptr->Area()<<endl;
cout<<"In_Square's perimeter:"<<ptr->Perimeter()<<endl;
ptr=new Ex_Square(r);
cout<<"Ex_Square's area:"<<ptr->Area()<<endl;
cout<<"Ex_Square's perimeter:"<<ptr->Perimeter()<<endl;
return 0;
}
Circle::Circle(double rr)
{
r=rr;
}
double Circle::Radius()
{
return r;
}
double Circle::Area()
{
cout<<pi*r*r;
}
double Circle::Perimeter()
{
cout<<2*pi*r;
}
In_Square::In_Square(double rr) :Circle(rr)
{
}
double In_Square::Area()
{
double rr;
rr=Circle::Radius();
cout<<2*rr*rr;
}
double In_Square::Perimeter()
{
double rr;
rr=Circle::Radius();
cout<<sqrt(2*rr*rr)*4;
}
Ex_Square::Ex_Square(double r) :Circle(r)
{
}
double Ex_Square::Area()
{
double r;
r=Circle::Radius();
cout<<4*r*r;
}
double Ex_Square::Perimeter()
{
double r;
r=Circle::Radius();
cout<<8*r;
}