您的位置:首页 > 其它

第六章作业

2015-05-30 12:44 274 查看
【6.12】要求:

(1)建立基类area_cl的两个派生类rectangle与isosceles,让每一个派生类都包含一个函数area(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。

(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。

(3)要求通过使用基类指针访问虚函数的方法(运行时的多态)分别求出矩形和三角形的面积。

#include <iostream>

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 Rectangle :public Area_cl {

public:

Rectangle(double r, double s) :Area_cl(r, s)

{};

double area()

{

cout << "矩形的面积为:" << height*width << endl;

return 0;

}

};

class Isosceles :public Area_cl {

public:

Isosceles(double r, double s) :Area_cl(r, s)

{};

double area()

{

cout << "三角形的面积为:" << (height*width) / 2 << endl;

return 0;

}

};

int main()

{

Area_cl *p;

Rectangle t(10.0, 5.0);

Isosceles i(4.0, 6.0);

p = &t;

p->area();

p = &i;

p->area();

system("pause");

return 0;

}

【6.13】定义基类Base,其数据成员为高h,定义成员函数disp为虚函数。然后再由Base派生出长方体类Cuboid与圆柱类Cylinder。并在两个派生类中定义成员函数disp为虚函数。在主函数中,用基类Base定义指针变量pc,然后用指针pc动态调用基类与派生类中虚函数disp,显示长方体与圆柱体的体积。

#include<iostream>

using namespace std;

class Base {

public:

Base(double h1)

{

h = h1;

}

virtual void disp()

{}

protected:

double h;

};

class Cuboid :public Base{ //声明长方体类

public:

Cuboid(double h1, double l, double w) :Base(h1)

{

l_ = l;

w_ = w;

}

virtual void disp()

{

cout << "Cuboid的体积为:" ;

cout << h*l_*w_ << endl;

}

protected:

double l_; //定义长;

double w_; //定义宽;

};

class Cylinder :public Base { //声明圆柱类

public:

Cylinder(double h1, double r) :Base(h1)

{

r_ = r;

}

virtual void disp()

{

cout << "Cylinder的体积为:";

cout << PI*r_*r_*h << endl;

}

protected:

double r_; //定义半径

const double PI = 3.1415926;

};

int main()

{

Base *pc; //定义基类指针

Cuboid cu(2.0,3.0,4.0); Cylinder cy(2.0,3.0);

pc = &cu;

pc->disp();

pc = &cy;

pc->disp();

system("pause");

return 0;

}

#include <iostream>

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 Rectangle :public Area_cl {

public:

Rectangle(double r, double s) :Area_cl(r, s)

{};

double area()

{

cout << "矩形的面积为:" << height*width << endl;

return 0;

}

};

class Isosceles :public Area_cl {

public:

Isosceles(double r, double s) :Area_cl(r, s)

{};

double area()

{

cout << "三角形的面积为:" << (height*width) / 2 << endl;

return 0;

}

};

int main()

{

Area_cl *p;

Rectangle t(10.0, 5.0);

Isosceles i(4.0, 6.0);

p = &t;

p->area();

p = &i;

p->area();

system("pause");

return 0;

}

给出下面的抽象基类container:

class Container {

protected:

double radius;

public:

Container(double radius1)

{

radius = radius1;

}

virtual double surface_area() = 0; //纯虚函数

virtual double volume() = 0; //纯虚函数

};

要求建立3个继承container的派生类cube、sphere、与cylinder,让每个派生类都包含虚函数surface_area()和double volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。

#include<iostream>

using namespace std;

class Container {

protected:

double radius;

public:

Container(double radius1)

{

radius = radius1;

};

virtual double surface_area() = 0;

virtual double volume() = 0;

};

class Cube:public Container{

public:

Cube(double radius1) :Container(radius1)

{}

virtual double surface_area()

{

cout << "Cube的表面积: " << 6 * radius*radius << endl;

return 0;

}

virtual double volume()

{

cout << "Cube的体积: " << radius*radius*radius << endl;

cout << endl;

return 0;

}

};

class Sphere :public Container {

public:

Sphere(double radius1) :Container(radius1)

{}

const double PI = 3.1415926;

virtual double surface_area()

{

cout << "Sphere的表面积: " << 4 * PI*radius*radius << endl;

return 0;

}

virtual double volume()

{

cout << "Sphere的体积: " << (4 * PI * radius*radius*radius) / 3 << endl;

cout << endl;

return 0;

}

};

class Cylinder :public Container {

public:

Cylinder(double radius1, double h) :Container(radius1)

{

h_ = h;

}

const double PI = 3.1415926;

virtual double surface_area()

{

cout << "Cylinder的表面积: " << (2 * PI*radius*radius) + (PI * 2 * radius * h_) << endl;

return 0;

}

virtual double volume()

{

cout << "Cylinder的体积: " << PI*radius*radius*h_ << endl;

cout << endl;

return 0;

}

private:

double h_;

};

int main()

{

Container* pc;

Cube cu(6.0); Sphere sp(5.0);Cylinder cy(5.0, 6.0);

pc = &cu;

pc->surface_area(); pc->volume();

pc = &sp;

pc->surface_area(); pc->volume();

pc = &cy;

pc->surface_area(); pc->volume();

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: