以下代码进入无限循环。
#include <string>
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "Normal constructor" << endl;
}
A(const A& moo){
cout << "It's a constructor!" << endl;
operator=(moo);
}
void operator=(const A& moo){
cout << "Calling A::Operator=" << endl;
}
};
class B : public A{
public:
B(){}
B(const A& thea){
cout << "Gotshere" << endl;
operator=(thea);
}
};
int main(){
B b;
b = A();
}
无限循环的输出在“Normal constructor”和“Gotshere”之间循环。我从main
函数中猜测,在将 an 分配A
给一个B
类时,它会尝试调用B::operator=
不存在的 ,因此它会B(const A&)
再次调用。
我不明白为什么A()
会被调用。有人知道吗?EDIT应该已经说清楚了,A()
就是在无限循环上反复调用。
当然,解决方法是 put B::operator=(const A&)
,但我很想知道它为什么这样做。
此外,我为 class 添加了一个运算符B
:
void B::operator=(const A&) { cout << "That should fix things. A::Operator=" << endl; }
它确实解决了问题,但是当我这样做时B b; b = B()
,我得到Calling A::operator=
的不是 `B::operator=' 的输出。这是为什么?