1つの仮想関数を持つ基本クラスがあります
class Base
{
public:
virtual void print() {
cout<<"IN BASE\n";
}
}
今、私はそのオブジェクトを作成します
Base b
とコール
b.print();
「ベース」クラスには1つの仮想関数が含まれ、そのVTableが作成されるため、これは動的バインディングですか..
1つの仮想関数を持つ基本クラスがあります
class Base
{
public:
virtual void print() {
cout<<"IN BASE\n";
}
}
今、私はそのオブジェクトを作成します
Base b
とコール
b.print();
「ベース」クラスには1つの仮想関数が含まれ、そのVTableが作成されるため、これは動的バインディングですか..
オブジェクトが作成されるのと同じコンテキストでは、コンパイラは正確な型を認識しているため、仮想ディスパッチを使用する必要はありません。しかし、それは仮想関数の数とは関係ありません (そして、少なくとも 1 つある限り、コンパイラはvtableを生成し、オブジェクトにvptrを格納します)。
Base b;
b.print(); // can be optimized to b.Base::print(),
// with no virtual dispatch
void f( Base& b ) {
b.print(); // must use virtual dispatch (ignoring potential inlining)
}