📅  最后修改于: 2023-12-03 15:26:04.361000             🧑  作者: Mango
UGC NET CS 2017 年一月至三日是印度大学委员会(University Grants Commission)为计算机科学领域的研究生和教师而设计的国家水平考试。该考试的目的是评估考生在计算机科学领域的知识和技能,以便他们能够在高等教育机构中扮演领导角色。问题 29 针对编程语言的基础知识和概念。
考虑以下重载的 C++ 操作符 + 和 +=
class SomeClass {
public:
int val;
SomeClass() { val = 0; }
SomeClass(int v) { val = v; }
SomeClass operator+(const SomeClass& sc) {
SomeClass newSc(sc.val + val);
return newSc;
}
SomeClass& operator+=(const SomeClass& sc) {
val += sc.val;
return *this;
}
};
考虑以下代码片段:
SomeClass a = 3;
SomeClass b = 5;
a += b + 1;
请问 a 和 b 的值是多少?
题目中定义了一个名为 SomeClass 的类,其中定义了一个重载操作符 + 和 +=,分别用于实现加法和加等于操作。根据题目所给的代码片段,我们先创建了两个 SomeClass 类型的对象,分别为 a 和 b,分别初始化为 3 和 5。
接下来,针对 a 进行操作,首先进行 b 和 1 的相加操作,得到 AnotherClass 类型的对象,然后在将其加到 a 上,即:
a += b.operator+(AnotherClass(1));
在执行该代码时,先调用 operator+ 方法计算 b 和 AnotherClass(1) 的和,即 b.val + 1 = 6,然后返回一个新的 SomeClass 类型的对象,将其作为参数传给 operator+= 方法,然后执行加等于操作,即 val += 6,在这个例子中,它的值变成了 9。最后我们可以看到,a 的值变成了 9,而 b 的值并未改变,仍是 5。
使用操作符重载的 C++ 进行计算时,要使用正确的语法和操作符优先级。在本例中,题目要求我们计算一个类的加法和加等于操作符的功能,以及理解如何在运行时调用它们。关键在于仔细看题,理解题意,然后仔细阅读代码和操作符重载的描述,这样才能正确地回答问题。