這兩天看了C FAq。

2021-04-02 12:28:32 字數 1403 閱讀 2203

1:以前沒有知道這個,全是public繼承

//作為public的子類指標可以轉化為基類指標,

//但是protected,private 繼承的子類指標不能轉化為基類指標。

//預設不加轉化情況

class s1 ;

class s2 : protected s1   //public s1  private s1

;void f(s1* v)

;void g(s2* c)

int main(int argc, char* argv)

;2: 這個 象 那個常量定義,在建構函式中還不是常量,在析構中類似。

q66:若基底類別的建構子呼叫乙個虛函式,為什麼衍生類別覆蓋掉的那個虛擬函

數卻不會被呼叫到?

在基底類別 base 的建構子執行過程中,該物件還不是屬於衍生 derived 的,所以

如果 "base::base()" 呼叫了虛函式 "virt()",則 "base::virt()" 會被呼叫,

即使真的有 "derived::virt()"。

類似的道理,當 base 的解構子執行時,該物件不再是個 derived 了,所以當

base::~base() 呼叫 "virt()",則 "base::virt()" 會被執行,而非覆蓋後的版本

"derived::virt()"。

當你想像到:如果 "derived::virt()" 碰得到 derived 類別的物件成員,會造成什

麼樣的災難,你很快就會看出這規則的明智之處。

******************************==

q67:衍生類別的解構子應該外顯地呼叫基底的解構子嗎?

不要,絕對不要外顯地呼叫解構子(「絕對不要」指的是「幾乎完全不要」)。

衍生類別的解構子(不管你是否明顯定義過)會「自動」去呼叫成員物件的、以及基

底類別之子物件的解構子。成員物件會以它們在類別中出現的相反順序解構,接下來

是基底類別的子物件,以它們出現在類別基底列表的相反順序解構之。

只有在極為特殊的情況下,你才應外顯地呼叫解構子,像是:解構乙個由「新放入的

new 運運算元」配置的物件。

4:建立二維陣列的巨集,沒有用過,都是用的vector簡單搞定了

發信人: zswolf2000 (少年壯志不言愁), 信區: cplusplus      

標  題: [faq]如何用巨集生成動態二維陣列

發信站: bbs 水木清華站 (sun feb 16 22:07:45 2003), 站內

#define matrix_allocate(matrix, width, height, type)

#define matrix_delete(matrix, width, height)

用這兩個巨集

最近這兩天

最近這個兩天一直在和愛機作鬥爭,幸好都是人民內部矛盾,還沒有到不可調和的地步。其實怪我,想法太多 又想raid,又想server2008,見異思遷,三心二意,當然會讓愛機對我有意見。server 2008認得很順,格式化,拷貝檔案,安裝成功!然後當然是驅動了。server2008用vista的驅動,...

這兩天的想法

你太感性了 這是昨天和乙個老朋友 聊天時,她對我的評價。我的確很感性,以至於很多時候,我看那種比較感人的電影都會流淚。這沒有什麼不好,至少我這樣認為。我的煩惱是 雖然我是乙個很感性的人,可是在某些需要感性的時候,我卻表現得太理性。team裡乙個新來的mm對我說 咱們公司裡的女生,很多都自信得有點過頭...

這兩天的工作

這兩天是週末,一直在看關於arm和embedded system的書。tsinghua小杜的那本書實在是錯誤太多了。好象沒有經過任何的校對就拿來出版了。時不時就過來幾個莫名其妙就出來乙個暫存器得符號!我敢和你打賭絕對是他錯了,看來有必要在我得blog幫他出個勘誤表了。還有昨天晚上用了3個小時的時間來...