わかりました、多分私は疲れすぎてこの問題の解決策を考えることができません。インターネットで同様の問題についてよく調べましたが、見つかりませんでした。だからここに私のひどいコードがあります:
class X
{
public:
virtual const X& operator =( const X& ) = 0;
};
class Y : public X
{
public:
virtual const X& operator =( const X& x )
{
return *this;
}
};
class Z : public Y
{
};
int main_08(int argc, char* argv[])
{
Z z1;
Z z2;
z1 = z2;
return 0;
}
クラス Z の代入はオーバーライドされないため、定義されている Y の代入演算子を指す必要があるため、コードは正常に実行されるはずです。したがって、「z1 = z2」と記述するときは、その基底クラスの代入演算子を呼び出す必要があります。この行をコメントアウトすると、コードは正常に実行されます
代わりに、LNK2019 が次のように言っています。
エラー LNK2019: 未解決の外部シンボル "public: virtual class X const & __thiscall X::operator=(class X const &)" (??4X@@UAEABV0@ABV0@@Z) 関数で参照されている "public: class Y & __thiscall Y::operator=(class Y const &)" (??4Y@@QAEAAV0@ABV0@@Z)
私は困惑しており、仮想関数ルーティングメカニズムがどのようにして X::operator =( const X& ) を呼び出すようになったのか理解できません。何かご意見は?