class Base {
private:
int a;
public:
Base(){}
Base( int a ) : a(a) { }
Base& operator=(const Base& rhs){ }
void setA(int a){ this->a = a;}
int getA(){ return a;}
};
class Derived : public Base {
public:
int getB(){ return b;}
Derived(int b) : b(b){}
Derived& operator=(const Derived& rhs){
this->b = rhs.b;
}
private:
int b;
};
int main() {
Base b(3);
Derived d(9);
d.setA(44);
Derived cd = d;
cout << cd.getA() << " " << cd.getB() << endl;
return 0;
}
W powyższym kodzie jak widać podejmuję decyzję, że sam zdefinuję sobie operatory =. Jak widać w klase bazowej nie chcę, aby cokolwiek było kopiowane.
Stąd pytanie, skąd obiek cd ma wartość w składowej a wartość 44 skoro ja nie dopusczam do kopiowania? ( pomijam już fakt, że ja powinienem explicite wołać operator przypisania dla klasy Base w klasie Derived jeżeli chciałbym żeby została zdefiniowana część Base.
Skąd taka uprzejmość C++, wbrew temu co pisze Scott Meyers w ( bądź co bądź dość starej ) książce Effective C++?