天天看點

C/C++細節問題(bug調試)以動态綁定代碼來示例

在程式界,有句話是,程式好些,bug難調。

很多bug并不一點是邏輯錯誤,而是一些細節問題。

我們分析下三個細節錯誤引起的無法運作問題:

1

<code>//#define M_PI 3. 14159265358979323846      3.14中間有個空格</code>

<code>\t        寫成了\ t       有個空格</code>

首先,建立了一個新類型CFigure。我們想建立一些具體的圖形(如,三角形、正方形或者圓),以及計算這些圖形周長和面積的方法。但是,我們并不知道具體的圖形是什麼類型,是以無法用方法直接計算圖形的這些特性。這就是要把CFigure類建立為抽象類的原因。抽象類是至少聲明了一個虛方法的類,該虛方法沒有實作,且其原型後面有=0。以這種方式聲明的函數叫做純虛函數。抽象類不能有對象,但是可以有繼承類。是以可以執行個體化抽象類的指針和引用,然後從CFigure類派生出CTriangle、CSquare和CCircle類,分别表示三角形、正方形和圓形。

我們要執行個體化這些對象的類型,是以在這些派生類中,實作了FigureType方法、Circumference方法和Area方法。雖然這3個類中的方法名都相同,但是它們的實作不同,這與覆寫類似但含義不同。

如何了解?在本例的main函數中,聲明了一個數組,内含3個CFigure類型的指針。作為指向基類的指針或引用,它們一定可以指向該基類的任何派生類。是以,可以建立一個CTriangle類型的對象,并設定CFigure類型的指針指向它,

<code>CFigure* figures[3];</code>

同理,用下面的代碼可以設定其他圖形:

2

3

<code>figures[0] = </code><code>new</code> <code>CTriangle(2.1,3.2,4.3);</code>

<code>figures[1] = </code><code>new</code> <code>CSquare(5.4,6.6);</code>

<code>figures[2] = </code><code>new</code> <code>CCircle(8.9);</code>

現在,考慮下面的代碼:

4

5

6

7

<code>for</code> <code>(</code><code>int</code> <code>i = 0; i &lt; 3; i++)</code>

<code>    </code><code>{</code>

<code>        </code>

本文轉自 liam2199 部落格,原文連結:   http://blog.51cto.com/liam2199/1963425        如需轉載請自行聯系原作者

繼續閱讀