【发布时间】:2018-03-24 19:03:45
【问题描述】:
考虑以下我从“Sololearn”中获取的 C++ 代码。我是初学者,如果有人能回答我将不胜感激。它是关于运算符重载的主题。
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; 中使用的 + 是真的吗?来自 Operator+?
【问题讨论】:
-
您可以拥有任意数量的构造函数,但是构造类的实例是有意义的。是的,这是重载
+运算符的语法,不确定您还想听什么。是的,在您的示例中,MyClass::operator+是从obj1+obj2调用的。 -
MyClass res = obj1+obj2;与MyClass res = obj1.operator+(obj2);相同,重载运算符只是添加了“预期”语法的函数。operator+是函数的名称。 -
MyClass() {}你好未定义的行为。不要像那些孩子那样写代码! -
每个问题一个问题,而不是三个。
-
@CoryKramer:你为什么要在 cmets 部分回答?
标签: c++ class object constructor operator-overloading