C 類功能擴充套件預留五招

2021-04-17 09:18:25 字數 1411 閱讀 2831

通過派生類來進行功能擴充套件是基本的物件導向的方式,這種方式大如下:

class

base

virtual

void fun()

};

class

derive:public base

};

這種方式下,基類通過宣告虛函式,讓派生類來覆蓋,最後通過多型來實現擴充套件功能。這種方式的最大的缺點是基類的編寫者一般很難確定虛函式的功能究竟要實現到什麼程度,如果有一天突然發現乙個虛函式的功能要進行擴張(或收縮),那麼所有從這個基類派生的類都要進行編譯。這種方式的另乙個缺憾是。功能的擴充套件不能在執行時設定。

通過組合方式來為類的功能擴充套件留下餘地的方式,要比通過繼承的方式在耦合方面要鬆的多。就是把上面的虛函式所要委託給乙個其它的類。這種方式大體如下:

class

action

};

class

exaction:public action

};

class

void setactoin( action* action_)

private:

action* paction;

}; 在這個例子中,類

把它的功能委託給了類

action

。這樣一來,類

就和它的功能進行了解藕。解藕後的類

現在可以在執行時進行功能設定了。通過組合的方式雖然解藕了也能進行功能的執行時設定了。但卻明顯地不如第一種方式效率高。

通過函式指標成員方式,可以提高效率。這種方式大體如下:

class

virtual

void fun()

private:

fun pfun;

}; 通過為類預留乙個成員模板函式,而為類的使用者留下擴充套件的餘地。這種方式簡捷、幹練。遺憾的是這種方式不能用在動態方面上。這種方式大體如下:

class

};

template

< >

void

這種方式還能依偏特化的形式進行,具體請參考我的另一篇

blog

《讓後門能夠偏特化》。使用這種方式最奇妙的是宣告乙個模板建構函式來擴充套件類的構造功能。

上面的幾種方式都是針對乙個要進行開發的類為這個要開發的類留下擴充套件餘地。那麼能不能讓要開發的類用來擴充套件任意的已開發好的類的功能呢?這就是第五招模板基類。這種方式大體如下:

template

< class t>

class

};

現在我們可以方便的把類

的功能新增到任意的其它的類上了。這種擴充套件方式的功能非常強悍,它甚至引出乙個專門的程式設計方式:「基於策略的程式設計」。

詳見《c++程式設計就思維》。

C 類功能擴充套件預留五招

第一招虛函式 通過派生類來進行功能擴充套件是基本的物件導向的方式,這種方式大如下 class base virtual void fun class derive public base 這種方式下,基類通過宣告虛函式,讓派生類來覆蓋,最後通過多型來實現擴充套件功能。這種方式的最大的缺點是基類的編寫...

C 類功能擴充套件預留五招

通過派生類來進行功能擴充套件是基本的物件導向的方式,這種方式大如下 class base virtual void fun class derive public base 這種方式下,基類通過宣告虛函式,讓派生類來覆蓋,最後通過多型來實現擴充套件功能。這種方式的最大的缺點是基類的編寫者一般很難確定...

Java String類擴充套件功能實現

string類擴充套件功能實現 public class strings else string str1 newstring a return str1 將已有字串填充為規定長度,如果已有字串超過這個長度則返回這個字串 字元填充於字串前 例如 abc a 5 aaabc abc a 3 abc p...