乙個物件導向的程式範例
物件導向程式設計的3個要素:資料抽象、繼承及動態繫結。這個例程非常完整的展示了這3個要素。
程式要做的內容就是要將這個算術表達樹輸出,即得到:(-5)*(3+4)
expressions標頭檔案:
#ifndef expression_h_h
#define expression_h_h
#include#includeusing namespace std;
//基類
class exprnode
//exprnode的子類在執行自己的建構函式時,會呼叫父類的建構函式
//在裡這個父類的建構函式為子類其進行引用計數
virtual void print(ostream&) const = 0; //虛函式,在其子類中進行重新定義,執行時動態繫結
virtual ~exprnode() //保證在刪除由exprnode*指標指向的物件時能夠呼叫到正確的派生類析建構函式
virtual int result() const = 0;
private:
friend ostream& operator << (ostream &os, const exprnode &rhs) //友元函式過載輸出操作符
friend class expr;
int m_use; //計數
};//控制代碼類
class expr
int result() const
private:
friend ostream& operator<
// friend class exprnode;
exprnode *m_penode;
};//派生類:數節點
class intcode :public exprnode
void print(ostream &os) const
expr::expr(const string &op, expr t)
expr::expr(const string &op, expr left, expr right)
expr::expr(const string &op, expr left, expr middle, expr right)
expr::expr(const expr &t)
expr& expr::operator = (const expr &rhs)
//單目運算子
int unarynode::result() const
//雙目運算子
int bianrynode::result() const
//三目運算子
void ternarynode::print(ostream &os) const
{ os<#include "stdafx.h"
#include "expressions.h"
int main(int argc, char* argv)
{ expr t = expr("*", expr("-", 5), expr("+", 3, 4));
cout當我們分析出表示式是由節點和邊組成,便可以設計資料抽象來對樹進行建模,繼承讓我們抓住了各種節點和邊之間的相似之處,而動態繫結幫助我們為各種型別的節點定義操作,讓編譯器來負責安排在執行時能夠呼叫正確的函式。這樣,資料抽象加上動態繫結可讓我們集中精神考慮每個型別的行為和實現,而不必關心與其他物件的互動
《軟體管理沉思錄》讀書筆記
沉思錄 是一本經典哲學著作,哲學又被稱為 關於智慧型 的學科,那麼對於 軟體管理沉思錄 我們可以理解為它是關於軟體管理的智慧型。相較於之前讀的啟發式的軟體工程管理類的經典書籍,本書的語言更直白,想闡明什麼觀點都會明明白白地告訴你。本書對於寫讀書筆記來說是友好的,看每部分的標題即可知道文章內容,不必再...
《C 沉思錄》 筆記
calss trace trace file ff void print char s void on void off private int noise file f 4.是不是每個建構函式初始化所有的資料成員?5.類需要析構函式嗎?6.類需要乙個虛析構函式嗎?class b b class d...
《軟體管理沉思錄》第二章讀書筆記
最近在看軟體管理方面的書,看到此書感覺比較有感覺,特作一些總結性筆記以供以後參考。第二章 為高質量的專案指定計畫 一 最難以制訂計畫的時候,也是最需要計畫的時候。當專案感覺無法完成的時候是需要計畫一下的,原因如下 1 和管理層博弈一般都是管理層贏,如果沒有詳實的計畫,想要獲得更多的時間誰又能同意呢。...