0

次のクラスがあります。

には、main2種類の代入演算子があります(A = AおよびB = B)。

私はmain仕事をしようとしているので、私は試しました:

class A { // assume that this class is abstract
   public:
     virtual void assignment(const A& num) = 0;
     void operator=(const A& num) { assignment(num); }
     void func() = 0; // the class is abstract
};

class B: public A {
     int i;
   public:
     void assignment(const B& num) { i = num.i; }
     B& operator=(const B& num) { i = num.i; }
     void func() { cout << "hello!\n"; }
};

int main()
    A* a1 = new B(7); //assume I have it
    A* a2 = new B(6); //assume I have it
    B b1(2);
    B b2(4);
    *a1 = *a2; // implement an assignment operator
    b1 = b2; // implement an assignment operator
}

しかし、それが抽象クラスであることを示すいくつかのエラーが発生しB、コピーコンストラクターが機能しません

どんな助けでも大歓迎です!

4

1 に答える 1

1

さて、問題が何であるかがわかります。

void assignment(const B& num) { i = num.i; }

次のようにする必要があります。

void assignment(const A& num) { ... }

ただし、ここで問題があります。これはメンバー変数を持たないnum型です。したがって、それが実際にクラスであることを確認する必要があります。上記の ... 部分は次のようになります。AinumB

B& b_num = dynamic_cast<B&>(num);
i = num.i;

ただし、他の型をB&以外に変換しようとすると、 dynamic_cast が例外をスローする可能性があることに注意してくださいB

于 2013-05-17T09:13:50.573 に答える