0

多数の演算子 (=、+、-、+= など) を持つ基本コンテナー クラスがあります。派生クラスの演算子のロジックを変更する必要はないと予想されます。したがって、理想的には、派生クラスごとに明示的に再定義する必要なく、すべての派生クラスに基本クラス演算子を使用したいと考えています (代入演算子を除く)。

私が思いついた解決策を、簡単な例に基づいて以下に示します。解決策は機能しているように見えますが、より複雑な場合の方法の有効性については疑問があります. クラスBでこの割り当て「ハック」を使用することは有効だと思いますか? この方法の潜在的な落とし穴は何ですか? 見逃したものはありますか?必要な機能を実現する簡単な方法はありますか (つまり、派生クラスに基底クラス演算子を使用するなど)?

class A
{
 protected:
 int a;
 public:
 A(int ca)
 {
  a=ca;
 }
 A(const A& A1)
 {
  a=A1.a;
 }

 int geta() const
 {
  return a;
 } 
 void seta(int ca)
 {
  a=ca;
 }  
 const A& operator=(const A& A1)
 {
  a=A1.a;
  return *this;
 }

};

const A operator+(const A& A1, const A& A2)
{
 A myA(A1.geta()+A2.geta());
 return myA;
}

class B: public A
{
 public:
 B(int a): A(a) {}// ... using A::A;
 const B& operator=(const B& B1)
 {
  a=B1.geta();
  return *this;
 }
 const B& operator=(const A& B1)
 {
  a=B1.geta();
  return *this;
 }

};

int main()
{

 B myB(4);
 A myA(3);

 //need this to work
 myB=myB+myB;
 cout << myB.geta();
 myA=myA+myA;
 cout << myA.geta();

 int j;
 cin >>  j; 

}

4

2 に答える 2