問題及代碼:
Problem P: B 繼承 圓到圓柱體
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 231 Solved: 169
[Submit][Status][Web Board]
Description
定義了Circle圓形類,在此基礎上派生出Cylinder圓柱體類。
Circle圓形類定義如下:
class Circle
{
public:
Circle(double r):radius(r){ }
double area(){return PI*radius*radius;} //圓面積
protected:
double radius; //圓半徑
};
請在下面的程序段基礎上完成整個設計。
在主程序中輸出指定半徑的圓的面積(area),輸出指定圓底半徑和高的圓柱體表面積(area)和體積(volume)。
#include <iostream>
#include <iomanip>
using namespace std;
#define PI 3.14
class Circle
{
public:
Circle(double r):radius(r){ }
double area(){return PI*radius*radius;} //圓面積
protected:
double radius; //圓半徑
};
//將程序需要的其他成份寫在下面,只提交begin到end部分的代碼
//******************** begin ********************
//********************* end ********************
int main()
{
double r,h;
cout<<setiosflags(ios::fixed);
cout<<setprecision(2);
cin>>r;
Circle c(r);
cout<<c.area()<<endl;
cin>>r>>h;
Cylinder cy(r,h);
cout<<cy.area()<<" "<<cy.volume()<<endl;
return 0;
}
Input
圓的半徑
圓柱體圓底半徑 和 圓柱體的高
Output
圓的面積
圓柱體的表面積 和 體積
Sample Input
1
2 2.5
Sample Output
3.14
56.52 31.40
HINT
只提交begin到end部分的代碼
#include <iostream>
#include <iomanip>
using namespace std;
#define PI 3.14
class Circle
{
public:
Circle(double r):radius(r) { }
double area()
{
return PI*radius*radius; //圓面積
}
protected:
double radius; //圓半徑
};
//將程序需要的其他成份寫在下面,只提交begin到end部分的代碼
//******************** begin ********************
class Cylinder:public Circle
{
public:
Cylinder(double r,double h):Circle(r),high(h) {}
double area()
{
return (2*PI*radius*high+PI*2*radius*radius);
}
double volume()
{
return Circle::area()*high;
}
private:
double high;
};
//********************* end ********************
int main()
{
double r,h;
cout<<setiosflags(ios::fixed);
cout<<setprecision(2);
cin>>r;
Circle c(r);
cout<<c.area()<<endl;
cin>>r>>h;
Cylinder cy(r,h);
cout<<cy.area()<<" "<<cy.volume()<<endl;
return 0;
}
運行結果: