C面向对象实用例子章习题分析_第1页
C面向对象实用例子章习题分析_第2页
C面向对象实用例子章习题分析_第3页
C面向对象实用例子章习题分析_第4页
C面向对象实用例子章习题分析_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C面向对象实用例子章习题分析通过基类指针或引用即可访问基类和派生类中的同名函数。例2: 这里用到了什么?虚基类上例用到了虚基类,虚继承只存在一个CAnimal的复制。例3: 这里用到了什么?抽象类上例用到了抽象类,纯虚函数抽象类面积的计算方法不确定,设为纯虚函数,这样圆形有圆形的面积计算方法,矩形有矩形的面积计算方法,每个继承于CFigure的类都有自己的面积,通过getArea成员函数即可获得面积。包含纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数。抽象类只能作为基类派生新的子类,不能实例化。比方,软件构造师可以通过纯虚函数建立接口,然后让程序员填写代码实现接口,而自己主要负责建立抽

2、象类。例4:实现抽象类中的成员函数例5:多重继承多个基类派生一个子类派生出Teacher_Level类,包含教师和职称信息,新增工资信息。练习1:写出以下程序的运行结果#include using namespace std;class Apublic: A(int i = 3) x = i; virtual void at() coutx=xendl; void at2() at(); protected: int x;class B: public Apublic: B(int m) y = m; void at() couty=yat2(); B s(8); p = &s; p-at2(

3、); return 0; 程序运行结果:x=5y=8练习2:以下Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()那么是一个通用的用以求不同形状的图形面积总和的函数。请从Shape类派生三角形类(Triangle)、矩形类Rectangle,并给出具体的求面积函数。class Shape public: virtual double area() const=0;/纯虚函数; float total(Shape *s,int n) /一般函数 float sum=0.0; for(int i=0;iarea(); return sum; 解答:class Tri

4、angle:public Shapepublic:Triangle(double h,double w)H=h;W=w;double area() constreturn H*W*0.5;private:double H,W; class Rectangle:public Shapepublic:Rectangle(double h,double w)H=h;W=w;double area()constreturn H*W;private:double H,W;练习3:写出以下程序的运行结果#include class Triangle /定义三角形类public:void SetTriang

5、le(int x, int y, int z); double GetArea(); int GetPerimeter(); /周长 void Print(); private:int a,b,c; ;Triangle & compare(Triangle & t1, Triangle & t2);#include #include Triangle.hvoid Triangle:SetTriangle(int x, int y, int z) a=x;b=y;c=z;double Triangle:GetArea() double s;s = (a + b + c)/2.0;return s

6、qrt( s*(s-a)*(s-b)*(s-c); int Triangle:GetPerimeter() return (a + b + c); void Triangle:Print() coutthe three side of the triangle is:a,b,cendl; coutthe perimeter of the triangle is:GetPerimeter()endl; coutthe area of the triangle is:GetArea()t2.GetArea() return t1; else return t2;#include Triangle.

7、hvoid main()Triangle t1; t1.SetTriangle(4,5,6);Triangle t2; t2.SetTriangle(7,8,9);Triangle & max = compare(t1,t2);max.Print();程序运行结果: the three side of the triangle is:7,8,9 the perimeter of the triangle is:24 练习5:写出以下程序的运行结果#includeusing namespace std;class Bpublic: B() B(int i) b=i; /构造函数重载 virtua

8、l void virfun() coutB:virfun() is called.n; private: int b;class D:public Bpublic: D() D(int i,int j) :B(i) d=j; void virfun() coutvirfun(); int main()B *pd=new D;fun(pd);return 0; 运行结果:int main()B *pd=new D;fun(pd);return 0; 运行结果:D:virfum() is called.练习6定义一个抽象类CShape,包含纯虚函数Area()用于计算面积和SetData()用于重

9、设形状大小。然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写一个完整的程序。 #include #include using namespace std;class CShape public:virtual double Area() = 0;/纯虚函数 virtual void SetData() = 0 ;/纯虚函数;class CTriangle:public CShape double a, b, c;public: CTriangl

10、e() a = b = c = 0.0; CTriangle(double A, double B, double C) a = A; b = B; c = C; virtual double Area() double p = (a + b + c) / 2.0; return sqrt(p * (p - a) * (p - b) * (p - c); virtual void SetData() cout a b c; ;class CRect:public CShape double h, w; public: CRect() h = w = 0.0; CRect(double H, d

11、ouble W)h = H; w = W; virtual double Area() return h * w; virtual void SetData() cout h w;class CCircle:public CShape double r; public: CCircle() r = 0.0; CCircle(double R) r = R; virtual double Area() return r * r * 3.14; virtual void SetData() cout r; ;class CArea CShape *s3; public:CArea(double T

12、A = 0.0, double TB = 0.0, double TC = 0.0, double RH = 0.0, double RW = 0.0, double CR = 0.0)s0 = new CTriangle(TA, TB, TC); s1 = new CRect(RH, RW); s2 = new CCircle(CR); CArea() delete s0; delete s1; delete s2; void SetData() s0-SetData(); s1-SetData(); s2-SetData(); double GetArea() return s0-Area() + s1-Area() + s2-Area(); ;int main() CArea area(3.0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论