5-1
写一个程序,定义抽象基类Container,由它派生出三个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体)。用虚函数分别计算几种图形的表面积和体积。
#include <iostream>
#include <string>
using namespace std;
class Container{
protected:
double radius;
public:
Container(double ra): radius(ra) {}
virtual double surface_area() = 0;
virtual double volume() = 0;
};
class Sphere: public Container
{
public:
Sphere(double ra): Container(ra) {}
double surface_area(){
return (4*3.14*radius*radius);
}
double volume(){
return (4/3*3.14*radius*radius*radius);
}
};
class Cylinder: public Container
{
protected:
double height;
public:
Cylinder(double ra, double he): Container(ra), height(he){}
double surface_area(){
return (3.14*radius*radius*2+(3.14*radius*radius)*height);
}
double volume(){
return (3.14*radius*radius*height);
}
};
class Cube: public Container
{
public:
Cube(double ra): Container(ra) {}
double surface_area(){
return (radius*radius*4*6);
}
double volume(){
return (radius*radius*radius*8);
}
};
int main(){
Cylinder a(20,40);
cout<< a.volume() << endl;
Cube b(10);
cout << b.volume();
}
5-2
(1)建立基类area_cl的两个派生类rectangle 与isosceles ,让每一个派生类都包含一个函数area( ),分别
用来返回矩形与三角形的面积。用构造函数对height与width进行初始化;
(2)写出主程序,用来求height 与width分别为10.0与5.0的矩形面积,以及求height 与width分别为4.0与6.0的三角形面积。
(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。
#include <iostream>
#include <string>
using namespace std;
//定义基类
class area_cl {
protected:
double height;
double width;
public:
area_cl (double r, double s) { height=r; width=s; }
virtual double area( )=0;
};
//定义子类
class ractangle: public area_cl
{
public:
ractangle(double r, double s): area_cl(r, s) {}
double area(){
return (width*height);
}
};
//定义子类
class isosceles: public area_cl
{
public:
isosceles(double r, double s): area_cl(r, s) {}
double area(){
return (width*height/2);
}
};
//主函数
int main(){
area_cl *p;
ractangle a(10, 5);
cout << a.area() << endl;
isosceles b(4, 6);
cout << b.area() << endl;
p = &a;
cout << p->area() << endl;
p = &b;
cout << p->area();
}
5-3
应用抽象类,求圆、圆内接正方形、圆外切正方形的面积和周长。
#include <iostream>
#include <string>
using namespace std;
class container
{
protected:
double radius;
public:
container(double ar): radius(ar) {}
virtual double area() = 0;
virtual double perimeter() = 0;
};
//定义圆
class circle: public container
{
public:
circle(double ar): container(ar) {}
double area(){
return (3.14*radius*radius);
}
double perimeter(){
return (2*3.14*radius);
}
};
//定义内接正方形
class inrectangle: public container
{
public:
inrectangle(double ra): container(ra) {}
double area(){
return (2*radius*radius);
}
double perimeter(){
return (4*1.414*radius);
}
};
//定义外接正方形
class outrectangle: public container
{
public:
outrectangle(double ra): container(ra) {}
double area(){
return (4*radius*radius);
}
double perimeter(){
return (4*2*radius);
}
};
int main(){
circle a(20);
cout << a.area() << " " << a.perimeter() << endl;
inrectangle b(20);
cout << b.area() << " " << b.perimeter() << endl;
outrectangle c(20);
cout << c.area() << " " << c.perimeter();
}