考虑以下C ++代码,以便我从“Sololearn”中获取它。我是初学者,如果有人能回答,我将不胜感激。它是关于运算符重载的主题。
class MyClass {
public:
int var;
MyClass() {}
MyClass(int a)
: var(a) { }
MyClass operator+(MyClass &obj) {
MyClass res;
res.var= this->var+obj.var;
return res;
}
};
当他们在主要环境中使用它时,他们使用以下代码
int main() {
MyClass obj1(12), obj2(55);
MyClass res = obj1+obj2;
cout << res.var;
}
我的问题:
为什么MyClass有两个构造函数?对我来说最重要的问题是“operator +”已被定义为函数,但是当我们在main中使用它时,它的用法并不像函数。为什么?另一个不同的问题是,在这行MyClass中使用的+ res = obj1 + obj2;来自运营商+?
答案 0 :(得分:2)
为什么MyClass有两个构造函数?
因为这就是编写它的人想要的东西。他们想要这样做,以便你可以提供一个初始值,如果你愿意,只要让它默认为零。
不幸的是,他们犯了一个错误,他们的默认构造函数被破坏了。它应该是这样的:
MyClass() : var(0) {}
...否则var
的值是 indeterminate ,尝试阅读它的程序有未定义的行为。
现在你可以创建一个这样的对象:
MyClass obj; // uses first constructor
或者像这样:
MyClass obj(12); // uses second constructor
&#34;操作者+&#34;已被定义为函数,但当我们在main中使用它时,它的用法不像函数。为什么呢?
因为你可以。因为运营商很特别。 C ++就是这样设计的。为了能够重载/定义它们,它们需要是函数,但要成为运算符,它们需要使用自己的语法。
请注意,可以将其称为函数,如果您想:
MyClass res = obj1.operator+(obj2);
...但你不想。
是否可以说在此行中使用的+ MyClass res = obj1 + obj2;来自运营商+?
是
从a proper book学习C ++会更好。