C 沉思錄第八章算數表示式樹的物件導向問題的分析

2021-07-01 23:37:01 字數 1971 閱讀 5626

剛開始看沉思錄,覺得太枯燥。到了第八章,作者關於物件導向問題的分析,我follow書上的設計開發,理解了一些以前只是在書上看到的概念。

給自己做幾點註解吧:

1.虛基類用來表達所有的繼承類的共有特點,在這個例子中,所有的繼承類都要有輸出和求值計算,所以我們把這兩個函式定義為虛函式。

2.虛基類必須至少含有乙個純虛函式。該純虛函式可以定義也可以不定義。

3.我們要保證由虛基類派生出來的類的物件能被正確的析構,所以將虛基類的析構函式定義為虛函式。

4.對於虛函式如果沒有定義,也應該使用一對{}來表明。

5.友元類的所有成員函式都是另乙個類的友元函式,都可以訪問另乙個類中的隱藏資訊(包括私有成員和保護成員),而且友元類應先定義在使用友元類的類的前面。

6.當希望乙個類可以訪問另乙個類的私有成員時,可以將該類宣告為另一類的友元類。

7.友元關係不可以被繼承,也不可以傳遞,而且是單向的。

8.expr的建構函式使用的引數為expr,這樣就可以巢狀構造expr物件。

#ifndef expr_h

#define expr_h

#include#includeusing namespace std;

class expr_node//抽象基類

virtual int eval()const=0;

virtual ~expr_node(){};

public:

virtual void print(ostream &)const = 0;

};class expr//具體類

expr& operator=(const expr &);

~expr()

int eval()const

};class int_node :public expr_node

void print(ostream & o)const

int eval()const

};class unary_node :public expr_node

int eval()const;

void print(ostream & o)const };

class binary_node :public expr_node

int eval()const;

void print(ostream & o)const

};class ternary_node :public expr_node

void print(ostream & o)const;

int eval()const;

};int binary_node::eval()const

int unary_node::eval()const

expr::expr(int t)

expr::expr(const string & op, expr e)

expr::expr(const string &op, expr d, expr e)

expr::expr(const string &op, expr a, expr b, expr c)

expr& expr::operator=(const expr &r)

ostream & operator << (ostream &o, const expr_node &t)

ostream& operator <<(ostream & o, const expr &r)

void ternary_node::print(ostream & o)const

int ternary_node::eval()const

#endif

#include#include"expr.h"

using namespace std;

int main()

{ expr t = expr("*", expr("-", 5), expr("+", 3, 4));

cout << t <<"="<

《C 沉思錄》 第八章 乙個物件導向程式範例

node.h ifndef node h define node h include expr.h include include using namespace std class expr node virtual expr node virtual void print ostream con...

Perl語言入門筆記 第八章 用正規表示式進行匹配

用正規表示式進行匹配 pod m m m m m m 匹配的時候根據需要寫自己的定界符,像qw省略雙引號定界符一樣 模式匹配修飾符 跟在定界符後面的,x,x就是模式匹配修飾符 i 忽略大小寫 s 匹配任意字元 if barney.fred s s會把 裡面的.全部替換為 d d 這是需要再讓.匹配除...

C的基礎上學習C (第八章 物件導向程式設計簡介)

c 中,用new關鍵字來呼叫建構函式。例如,可以用下面的方式通過其預設的建構函式例項化乙個cupofcoffee物件 cupofcoffee mycup new cupofcoffee 還可以用非預設非建構函式來建立物件。cupofcoffee mycup new cupofcoffee blue ...