0

我有下一节课。

main我有 2 种赋值运算符(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它的类型A没有成员变量i。所以我们需要确保它num实际上是 class B。上面的 ... 部分现在变成:

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

但是请注意,如果您尝试将其他类型转换为B&than ,则 dynamic_cast 可能会引发异常B

于 2013-05-17T09:13:50.573 回答