習題 12.1 在例12.1程式基礎上作一些修改。定義Point類,由Point類派生出Circle類,再由Circle類派生出Cylinder類。將類的定義部分分別作為3個頭檔案,對它們的成員。。。
阿新 • • 發佈:2018-12-11
C++程式設計(第三版) 譚浩強 習題12.1 個人設計
習題 12.1 在例12.1程式基礎上作一些修改。定義Point類,由Point類派生出Circle類,再由Circle類派生出Cylinder類。將類的定義部分分別作為3個頭檔案,對它們的成員函式的宣告部分分別作為3個原始檔,在主函式中用#include命令把它們包含進來,形成一個完整的程式,並上機執行。
程式碼塊:
Point.h標頭檔案
#include <iostream> using namespace std; class Point { public: Point(double x=0, double y=0); void setPoint(double, double); double getX() const{return x;} double getY() const{return y;} friend ostream & operator<<(ostream &, const Point &); protected: double x, y; };
Circle.h標頭檔案
class Circle: public Point
{
public:
Circle (double x=0, double y=0, double r=0);
void setRadius(double);
double getRadius() const;
double area() const;
friend ostream& operator<<(ostream &, const Circle &);
protected:
double radius;
};
Cylinder.h標頭檔案
class Cylinder: public Circle { public: Cylinder(double x=0, double y=0, double r=0, double h=0); void setHeight(double); double getHeight() const; double area() const; double volume() const; friend ostream& operator<<(ostream &, const Cylinder &); protected: double height; };
PointFun函式
#include <iostream> #include "Point.h" using namespace std; Point::Point(double a, double b) { x=a; y=b; } void Point::setPoint(double a, double b) { x=a; y=b; } ostream& operator<<(ostream &output, const Point &p) { output<<"["<<p.x<<", "<<p.y<<"]"<<endl; return output; }
CircleFun函式
#include <iostream>
#include "Point.h"
#include "Circle.h"
using namespace std;
Circle::Circle(double a, double b, double r): Point(a, b), radius(r){}
void Circle::setRadius(double r){radius=r;}
double Circle::getRadius() const { return radius;}
double Circle::area() const {return 3.14159*radius*radius;}
ostream& operator<<(ostream &output, const Circle &c)
{
output<<"Center=["<<c.x<<", "<<c.y<<"], r="<<c.radius<<", area="<<c.area()<<endl;
return output;
}
CylinderFun函式
#include <iostream>
#include "Point.h"
#include "Circle.h"
#include "Cylinder.h"
using namespace std;
Cylinder::Cylinder(double a, double b, double r, double h)
:Circle(a, b, r), height(h){}
void Cylinder::setHeight(double h) {height=h;}
double Cylinder::getHeight() const {return height;}
double Cylinder::area() const {return 2*Circle::area()+2*3.14159*radius*height;}
double Cylinder::volume() const {return Circle::area()*height;}
ostream& operator<<(ostream &output, const Cylinder &cy)
{
output<<"Center=["<<cy.x<<", "<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height
<<"\narea="<<cy.area()<<", volume="<<cy.volume()<<endl;
return output;
}
main函式
#include <iostream>
#include "Point.h"
#include "Circle.h"
#include "Cylinder.h"
using namespace std;
int main()
{
Cylinder cy1(3.5, 6.4, 5.2, 10);
cout<<"\noriginal cylinder:\nx="<<cy1.getX()<<", y="<<cy1.getY()<<", r="
<<cy1.getRadius()<<", h="<<cy1.getHeight()<<"\narea="<<cy1.area()
<<", volume="<<cy1.volume()<<endl;
cy1.setHeight(15);
cy1.setRadius(7.5);
cy1.setPoint(5, 5);
cout<<"\nnew cylinder:\n"<<cy1;
Point &pRef=cy1;
cout<<"\npRef as a Point:"<<pRef;
Circle &cRef=cy1;
cout<<"\ncRef as a Circle:"<<cRef;
system("pause");
return 0;
}