継承中の付与関数の注意点

4986 ワード

派生クラスの付与関数を作成するときは、ベースクラスのデータ・メンバーに値を再付与することを忘れないでください.
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;

class Base{
private:
    int x,y;

public:
    Base& operator =(const Base &other){
        x=other.x;
        y=other.y;
        printf("Base operator
"); return *this; } Base(){ x=0;y=0; printf("base init
"); } void baseSet(int tx,int ty){ x=tx; y=ty; } }; class Derive:public Base{ private: int n,m; public: Derive& operator =(const Derive &other){ //x=other.x; //y=other.y; // Base::operator =(other); m=other.m; n=other.n; printf("Derive operator
"); return *this; } Derive(){ n=1;m=1; printf("Derive init
"); } void DeriveSet(int tn,int tm){ n=tn; m=tm; } }; int main(){ Derive a=Derive(); Derive b=Derive(); b.baseSet(9,9); b.DeriveSet(8,8); a=b; }

参考:高品質C++Cプログラミングガイド