为类实例定义了以下哪些C ++内置操作?

时间:2014-03-26 13:27:37

标签: c++ class operators

我在计算机科学课上的一个期中得到了这个问题,并且我试图找到正确的答案,但我一直在寻找一段时间并且没有找到最终确定答案的任何内容。这些是老师给出的选择:

A)==

B).

C)=

D)上面的b和c

E)上面的a,b和c

我标记(错误)的答案是B,我知道正确答案必须包含B,因为此运算符始终与没有任何重载的类一起使用。但是,其他选项之一也必须正确,但我不知道它是否只有一个或两个。我知道=会给出一个浅表副本,所以我假设它包含在答案中。但==是否会做任何事情,如果没有超载?

总而言之,我猜测正确的答案是D,但我希望有人支持这个说法,并希望能指出我在线的一些文档的方向,因为我似乎无法找到它

2 个答案:

答案 0 :(得分:0)

正确的答案是D(如果你愿意,还有B和C.)必须重载operator==才能与用户定义的类一起使用。

想象一下代码:

class A {
    void foo() {...}
};

A a;
a.foo(); // you have seen this, alright

A b;
a = b; // this does a shallow copy or uses your assignment constructor

A c = b // this does a shallow copy or uses your copy constructor

bool issame = (a == b); // gives an compiler ERROR if operator== is not overloaded for A

答案 1 :(得分:-1)

正确的答案是B。

==需要由用户定义。

=是(复制/移动)构造函数或赋值运算符,具体取决于上下文。复制/移动构造函数is usually generated by the compiler if not defined, but there are specific circumstances in which it is not。在任何情况下,它都不是“内置”的任何含义。在某种意义上,所有这些都可以被“抑制”。