我不知道的C 構造方法中呼叫虛方法

2022-02-11 11:18:11 字數 553 閱讀 8090

class program

catch(exception ex)

console.read();

}class a

public override string tostring()

}class b : a

public override string tostring()

}//乙個物件引用

class ref

}執行以上**會出現異常,原因很簡單,類a是其他類的基礎類,但是在類a的建構函式中呼叫了虛方法tostring(),導致程式出錯。原因是在執行new b();  時的執行順序是首先初始化自己的保護變數my然後呼叫基類的建構函式a(),最後再執行自己的建構函式b(),問題處在呼叫基類建構函式a()的時候整個物件型別任然保持了真是的型別b,clr執行型別a的虛方法tostring()的時候會去找它自身的虛方法,就是型別b的tostring()方法,但是此時b的構造過程還沒有結束它是不可能呼叫到這個tostring()虛方法的,對於未構造成員的訪問將會產生異常。

避免這種異常的方法是在將會被整合的類的建構函式中永遠不要使用虛方法。

我不知道的C 概念

接觸c 已有兩三個年頭,但好像一直都在其邊緣逗留,今天準備學習一下boost庫,看到學習庫的首要條件便是要知道 raii,函式物件和謂詞。但這幾個概念,我都覺得很新鮮!raii 資源獲取就是初始化,為了便於記憶,暫時把它理解為,把資源做為類的成員,在類的建構函式中做初始化,在析構函式中釋放資源,這樣...

C 我不知道的事

1.命名空間是起什麼作用的?和程式集之間的關係 乙個程式集可以有多個命名空間。2.靜態類是幹什麼的?靜態類也只是把邏輯相關的一些靜態函式組織在一起,除此之外沒有其他功能。功能限制就是只能包含靜態成員。3.抽象函式和介面到底選哪個?相同點 都不能直接例項化。都是抽象的概念,設計模式的精髓就是面向抽象程...

C 中你不知道的語法

傳建構函式,不會引起拷貝建構函式的呼叫 當傳乙個乙個已經構造好的物件時,cpp view plain copy include include include include using namespace std class foo foo foo const foo rhs foo operat...