我有下一个课程。
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
是一个抽象类,然后复制构造函数不起作用
任何帮助表示赞赏!
答案 0 :(得分:1)
好的,现在我明白了问题所在:
void assignment(const B& num) { i = num.i; }
应该是:
void assignment(const A& num) { ... }
但是,我们现在遇到了一个问题:类型为num
的{{1}}没有成员变量A
。因此,我们需要确保i
实际上属于num
类。上面的...部分现在变成:
B
但请注意,如果您尝试将某些其他类型转换为B& b_num = dynamic_cast<B&>(num);
i = num.i;
而不是B&
,则dynamic_cast可能会引发异常。