2011-11-15 18 views
0

ここから取得:http://www.cplusplus.com/doc/tutorial/inheritance/基本クラスから継承するものは何ですか?

基本クラスから継承しているものはありますか?原則として 、派生クラスは除いて、基本クラスのすべてのメンバーを継承します。

its constructor and its destructor 
its operator=() members 
its friends 

私の質問は、演算子=()メンバーが何をしている、ありますか?

+1

ごみを合理化しようとすると、cplusplus.comの噴出は愚かな作業です! [良い本](http://jcatki.no-ip.org/fncpp/Resources)を購入する。 –

答えて

0

あなたは=()演算子のいずれかの種類を定義することができます。非常に役に立たないものさえ。しかし、それらのうちのどれもが子クラスに継承されません。あなたのリンクサイトから、私は少し明確にするために少し変更しました。この例は、上記のエラーのためにコンパイルされません。

class mother { 
public: 
    mother() 
    { cout << "mother: no parameters\n"; } 
    explicit mother (int a):m_int(a) 
    { cout << "mother: int parameter\n"; } 

    mother& operator=(mother const& rhs) 
    { 
     if(&rhs != this) 
     { 
      m_int = rhs.m_int; 
     } 
     return *this; 
    } 

    mother& operator=(int i) 
    { 
     m_int = i; 
     return *this; 
    } 
private: 
    int m_int; 
}; 

class son : public mother { 
public: 
    explicit son (int a) : mother (a) 
    { cout << "son: int parameter\n\n"; } 
}; 
int main() 
{ 
    mother mom(2); 
    son daniel(0); 
    mom = 3; 
    daniel = 4; // compile error 
    daniel = mom; // also error 
} 
2

operator=()は代入演算子です。複数の「メンバー」を持つことにより、すべての代入演算子のオーバーロードを意味します(例:+=,*=など)。

+2

私は複数形が 'operator ='の複数のオーバーロードを意味するかもしれないと考えます。 –

+1

リストはC++ 98では部分的にしか正しくないことに注意してください。 C++ 98のコンストラクタは継承されません( 'operator ='は継承されますが、自動的にシャドーされます)。 C++ 11では、コンストラクタを含まない通常の継承と 'using 'を介した明示的なコンストラクタ継承を区別しなければなりません。 –

1

それはスマートポインタなどで見られるように、代入演算子Object& operator=(const Object& rhs)と転送オペレータObject& operator=(Object& rhs)することができ

0

operator=()は、クラスの代入演算子で、あなたは簡単に値がうんざりするほどporcessてひとつひとつの時間をステップすることなく、別のクラスの一つのオブジェクトを形成割り当てることができるようにしたい場合は、それが定義されています。このプロセスはoverloadingと呼ばれ、C++ documentationと同様に、Wikipediaにはそのトピックをカバーするgreat articleが含まれています。

関連する問題