首先,爲了回答這個問題,我們需要檢查什麼monomorphic
的真正含義。要做到這一點,讓我們打破了一句話:
mono - morphic
因此,如果我們假設單=一個和的Morphic =變形(至少在這個例子 - 不殺我了字典語義)
因此,我們可以認爲這意味着很多東西,這裏有幾個把我的頭頂部:
- 我們班只能變更一次
- 或者,它可能被用作相反多態性(這意味着它不能派生子類)
- 最後,它可能是指數學的性質:http://en.wikipedia.org/wiki/Monomorphism
因此,假設這個問題的答案3是不我們正在尋找的東西(在這種情況下,您必須找到更好的答案,因爲這篇文章很混亂),讓我們一步一步。
1.我們班一次只能
改變在我看來,這是最有可能的意思。乍一看,你的對象是單形,這意味着它只能通過構造函數(是指定的構造函數或內置的拷貝構造函數)更改一次。
在任何具有可讀寫內存的計算機中,這不可能是真實的,因爲如果需要,幾乎總是有辦法手動設置內存中的位。
然而,從場景限制,使用你提供的接口,那麼,你的類是單型,它的成員(m
)只能通過構造方法設置。
2.我們班不是多態
這個問題的答案之一是有點複雜。與大多數語言不同,C++有兩種形式的多態。在傳統的OO意義上,它具有創建被子類覆蓋的功能的能力,其將被標記爲virtual
。但是,您不這樣做,所以OO多態性不適用於您的類。
但是,正如我前面所說,C++中有多種可用的多態。第二類被稱爲template polymorphism
或function polymorphism
,這是整個STL(主要用於迭代器)使用,它的工作原理有點像這樣:
template<typename aImpl>
void printA(const aImpl &a)
{
a.print();
}
class A {
public:
void print() { puts("I'm in A!"); }
};
這是一個完全有效的接口,並且它會工作作爲預期。然而,沒有什麼可以阻止放置在功能下面的類:
class B {
public:
void print() { puts("I'm in B!"); }
};
這顯然打印不同的值。最後,C++是一門複雜的語言,如果你真的想讓一個類不能成爲多態,那麼你需要讓所有的成員和函數都是私有的,這就違背了第一個對象的目的地點。
一個如何定義單態?我不相信你指的是代數的屬性:http://en.wikipedia.org/wiki/Monomorphism,但我從來沒有見過在別處使用的術語。 –
請注意,C++與Java或PHP不同。構造函數通常在C++中寫法非常不同。 –
在這種情況下,boo與foo有什麼關係? –