私はこの動作を理解しようとしていますが、私はそうではないようです。このコードを参照してください。派生クラスは、基底の代入演算子を間接的に継承しますか?
#include <iostream>
using namespace std;
class Base
{
public:
void operator=(const Base& rf)
{
cout << "base operator=" << endl;
this->y = rf.y;
}
int y;
Base() : y(100) { }
};
class Derived : public Base
{
public:
int x;
Derived() : x(100) { }
};
int main()
{
Derived test;
Derived test2;
test2.x = 0;
test2.y = 0;
test.operator=(test2); // operator auto-generated for derived class but...
cout << test.x << endl << test.y << endl;
cin.ignore();
return 0;
}
プログラムの出力:
> base operator=
> 0
> 0
今、私は混乱しているです: ルールは派生クラスは、assigment演算子を継承することはありません代わりに、それは、独自に作成することを言いますoperator=
ただし、この例では、基底クラスのoperator=
が呼び出されます。
第2に、派生クラスで明示的に定義されていない派生クラスに対して明示的に譲渡演算子を呼び出すことができました。
これを正しく理解すれば、ユーザー定義ベースの演算子は常に派生クラスで呼び出されることを意味しますか?
これは、ユーザ定義演算子がサブオブジェクトの演算子を呼び出さないことを意味しますか?コンパイラが生成した演算子コールのサブオブジェクトの演算子のみがそうであると言っていますか? – codekiddy
@codekiddy:基本クラスのバージョンを自分で呼び出すのでなければ、コンパイラはあなたのためにそれをしません。 – Xeo
非常にverryありがとう! – codekiddy