コンストラクション関数は虚関数ですか?どうして?(ある会社の実習生募集面接試験問題)
数年前の実習生の面接で、この問題に出会ったが、最近また人の話を聞いたので、簡単に話した.まず簡単なコードを見てみましょう.
上記のプログラムの結果が4であるのは,虚関数ポインタがおかしいからである.次に続けてみましょう.
構造関数は虚関数ではないことがわかります.なぜですか.コンストラクション関数を呼び出すと、オブジェクトが生成されることを知っています.コンストラクション関数が虚関数であると仮定すると、虚関数数テーブルに存在し、虚関数テーブルを探すには虚関数ポインタが必要であり、虚関数ポインタがオブジェクトに存在すると矛盾します.今はオブジェクトが生成されていません.何の虚関数ポインタがありますか.
前述したように、コンストラクション関数は絶対に虚関数ではありません.このような問題は、実際にはC++の基本的な知識に対する考察であり、子供靴の皆さんは、今度会うともう恐れる必要はありません.
#include
using namespace std;
class A
{
public:
virtual void fun()
{
}
};
int main()
{
cout << sizeof(A) << endl; // 4
return 0;
}
上記のプログラムの結果が4であるのは,虚関数ポインタがおかしいからである.次に続けてみましょう.
#include
using namespace std;
class A
{
public:
virtual A() // error
{
}
};
int main()
{
return 0;
}
構造関数は虚関数ではないことがわかります.なぜですか.コンストラクション関数を呼び出すと、オブジェクトが生成されることを知っています.コンストラクション関数が虚関数であると仮定すると、虚関数数テーブルに存在し、虚関数テーブルを探すには虚関数ポインタが必要であり、虚関数ポインタがオブジェクトに存在すると矛盾します.今はオブジェクトが生成されていません.何の虚関数ポインタがありますか.
前述したように、コンストラクション関数は絶対に虚関数ではありません.このような問題は、実際にはC++の基本的な知識に対する考察であり、子供靴の皆さんは、今度会うともう恐れる必要はありません.