第六章课后习题答案(第二版谭浩强)
1:
//xt6-1/cpp
#include
{Cylinder cy1(3.5,6.4,5.2,10);
cout<<\< cout<<\ Point &pRef=cy1; cout<<\ Circle &cRef=cy1; cout<<\ return 0; } 3:解法一 #include {public: Point(float a,float b):x(a),y(b){} ~Point(){cout<<\ private: float x; float y; }; class Circle:public Point {public: Circle(float a,float b,float r):Point(a,b),radius(r){} ~Circle(){cout<<\ private: float radius; }; int main() {Point *p=new Circle(2.5,1.8,4.5); delete p; return 0; } 3:解法二 #include Point(float a,float b):x(a),y(b){} ~Point(){cout<<\ private: float x; float y; }; class Circle:public Point {public: Circle(int a,int b,int r):Point(a,b),radius(r){} ~Circle(){cout<<\ private: float radius; }; int main() {Point *p=new Circle(2.5,1.8,4.5); Circle *pt=new Circle(2.5,1.8,4.5); delete pt; return 0; } 3:解法三 #include Point(float a,float b):x(a),y(b){} virtual ~Point(){cout<<\ private: float x; float y; }; class Circle:public Point {public: Circle(float a,float b,float r):Point(a,b),radius(r){} virtual ~Circle(){cout<<\ private: float radius; }; void main() {Point *p=new Circle(2.5,1.8,4.5); delete p; } 4: #include //定义抽象基类Shape class Shape {public: virtual double area() const =0; //纯虚函数 }; //定义Circle类 class Circle:public Shape {public: Circle(double r):radius(r){} virtual double area() const {return 3.14159*radius*radius;}; protected: double radius; }; //定义Rectangle类 class Rectangle:public Shape {public: Rectangle(double w,double h):width(w),height(h){} virtual double area() const {return width*height;} protected: double width,height; }; class Triangle:public Shape {public: Triangle(double w,double h):width(w),height(h){} virtual double area() const {return 0.5*width*height;} //结构函数 //定义虚函数 //半径 //结构函数 //定义虚函数 //宽与高 //结构函数 //定义虚函数 protected: double width,height; //宽与高 }; //输出面积的函数 void printArea(const Shape &s) {cout< int main() { Circle circle(12.6); circle cout<<\ =\ printArea(circle); Rectangle rectangle(4.5,8.4); 象rectangle cout<<\ printArea(rectangle); 面积 Triangle triangle(4.5,8.4); //建立Triangle类对象 cout<<\ =\ printArea(triangle); //输出triangle的面积 return 0; } 5: #include virtual double area() const =0; }; //定义Circle(圆形)类 class Circle:public Shape {public: Circle(double r):radius(r){} virtual double area() const {return 3.14159*radius*radius;}; protected: double radius; }; //定义Square(正方形)类 class Square:public Shape //建立Circle类对象 //输出circle的面积 //建立Rectangle类对 //输出rectangle的 //纯虚函数 //结构函数 //定义虚函数 //半径 {public: Square(double s):side(s){} //结构函数 virtual double area() const {return side*side;} //定义虚函数 protected: double side; }; //定义Rectangle(矩形)类 class Rectangle:public Shape {public: Rectangle(double w,double h):width(w),height(h){} //结构函数 virtual double area() const {return width*height;} //定义虚函数 protected: double width,height; //宽与高 }; //定义Trapezoid(梯形)类 class Trapezoid:public Shape {public: Trapezoid(double t,double b,double h):top(t),bottom(t),height(h){} //结构函数 virtual double area() const {return 0.5*(top+bottom)*height;} //定义虚函数 protected: double top,bottom,height; //上底、下底与高 }; //定义Triangle(三角形)类 class Triangle:public Shape {public: Triangle(double w,double h):width(w),height(h){} //结构函数 virtual double area()const {return 0.5*width*height;} //定义虚函数 protected: double width,height; //宽与高 }; int main() { Circle circle(12.6); //建立Circle类对象circle Square square(3.5); //建立Square类对象square Rectangle rectangle(4.5,8.4); //建立Rectangle类对象rectangle Trapezoid trapezoid(2.0,4.5,3.2); //建立Trapezoid类对象trapezoid Triangle triangle(4.5,8.4); //建立Triangle类对象 Shape *pt[5]={&circle,&square,&rectangle,&trapezoid,&triangle}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象 double areas=0.0; //areas为总面积 for(int i=0;i<5;i++) {areas=areas+pt[i]->area();} cout<<\ //输出总面积 return 0; }