以下のコードには 2 つのクラスがあります。タイプ 2 のオブジェクトが 1 つ作成され、クラス 1 のポインタに割り当てられます。
out 関数の呼び出しについては、クラス one の out 関数が呼び出されます。
#include<iostream>
using namespace std;
class one
{
public :
void out()
{
cout<<"one ";
}
};
class two
{
public :
void out()
{
cout<<"two ";
}
};
int main()
{
two dp[3];
one *bp = (one *)dp;
for (int i=0; i<3;i++)
(bp++)->out();
}
出力
one one one
私によると、出力は1つではなく2つになるはずです。タイプ 2 のオブジェクトを作成したとき、そのオブジェクトのメモリ位置にはクラス 2 の関数のアドレスが含まれていました。
編集-さらに、クラス2の関数の名前を変更しても、出力は変更されません。