網頁

2012年6月26日 星期二

C++ Const用法

C++的const關鍵字有很多種用法,而善加利用const,可以改善程式的封裝安全性。

下列介紹4種很基礎的const 用法:

  1: int b = 123;
  2: //1. 針對指標所儲存的常數做const的修飾。
  3: //(*a) = 3 錯誤的操作,但是可以針對所指向的記憶體位址做操作。
  4: //例如: a++ 在這邊是可以的。
  5: const int* a = &b; 
  6: //2.同上
  7: int const *a = &b;     
  8: //3.針對指標所指向的記憶體位址做const的修飾。
  9: //a++ 錯誤的操作,但是可以針對所儲存的常數做操作。
 10: //例如 (*a) = 3 在這邊是可以的。
 11: int* const a = &b;     
 12: //4.結合1、2跟3,同時對常數以及記憶體位址做const的修飾
 13: const int* const a = &b;    
另外,const也可以用來修飾function。

Strategy 策略模式

何謂策略模式:

定義各別的演算法並將其封裝起來,讓他們之間可以互相替換,此模式讓演算法的變動,不會影響使用演算法的程式。

image_thumb1

由上面的UML圖可以得知Strategy類別只是一個演算法介面,而ConcreteStrategyA、B、C是真正實作的演算法內容,而Context是真正使用演算法的類別。

 

從上面的UML圖我們更可以發現兩個重點:

 

※ 寫程式是針對介面撰寫,而不是針對實踐方式。

 

※ 將程式中可能需要變動之處,取出並封裝起來,以後便可以輕易低擴充此部分,而不影響不需要更動的其他部分

 

在未來我們可以增加ConcreteStrategyD,E,F而不會去影響原有的程式功能。

初談設計模式

40112-59_thumb1

設計模式是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。

 

物件導向設計模式通常以類別物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。

 

求學期間,老師們教學生的是能夠把功能達成為第一原則,對於Code的品質要求並沒有那麼的高。

 

在進入業界之後,除了要把該做的功能達成,更要把事情做好,當然也包括程式設計這件事情。在教育訓練的期間,是以這本書為主要參考書。此書的內容以Java為主,因為Java對當時的我來說是個陌生的語言,所以就照著此書的範例把它改成C++的版本。