簡體   English   中英

我可以在構造函數中調用虛函數嗎?

[英]Can I call a virtual function in a constructor?

我知道在構造函數中調用虛函數會導致未定義的行為。 但是,使用范圍修飾符調用虛函數是否正常?

class A
{

public:
A() { A::f(); }
virtual void f();

};

class B
{

public:
B() { B::f(); }
virtual void f();

};

我認為它與調用非虛函數沒有什么不同,它沒有任何問題。 這樣對嗎? 或者我忽略了什么?

你與你的電話就OK了A::f()A::A()B::f()B::B() 使用顯式限定調用函數時,不使用虛擬調用機制。

這是標准草案在調用虛函數時使用顯式限定的說法:

10.3 / 15范圍運算符(5.1)的顯式限定抑制了虛擬調用機制。 [例如:

class B { public: virtual void f(); };
class D : public B { public: void f(); };
void D::f() { / ... / B::f(); }

這里, D::f的函數調用確實調用B::f而不是D::f - 末端的例子]

你的例子很好,理解它的行為就像你調用非虛函數一樣。 我認為這是你的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM