父子之间的任务经营者

时间:2013-05-17 08:41:48

标签: c++ inheritance assignment-operator

我有下一个课程。

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是一个抽象类,然后复制构造函数不起作用

任何帮助表示赞赏!

1 个答案:

答案 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可能会引发异常。