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

提交評論