【问题标题】:Which of the following C++ built-in operations are defined for class instances? [closed]以下哪些 C++ 内置操作是为类实例定义的? [关闭]
【发布时间】:2014-05-04 22:38:12
【问题描述】:

我在计算机科学课的期中考试中把这个问题弄错了,我正在努力寻找正确的答案,但我已经搜索了一段时间,还没有找到任何可以确定答案的东西。以下是老师给出的选项:

A)==

B).

C)=

D) 上面的 b 和 c

E) 上面的 a、b 和 c

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

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

【问题讨论】:

  • 简单的查找方法;试试看。
  • 你得到的问题含糊不清。我想请老师澄清一下。

标签: c++ class operators


【解决方案1】:

正确答案是 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

【讨论】:

  • 快乐学习,我不知道。
  • 恕我直言:那么您必须标记 B)、C) 和 D)。
  • @CodeswithHammer 我设计了几个数学笔试。这个问题“以下哪些 C++ 内置操作是为类实例定义的?”严重畸形。
  • 当涉及到类实例时,复制赋值运算符实际上并不是内置的,编译器会生成一个operator= 成员函数(如果没有定义)。
  • 另外= 可能意味着两件事:赋值或复制构造函数...
【解决方案2】:

正确答案是B。

==需要用户自定义。

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

【讨论】:

  • = 是“内置”的,因为代码无需定义 operator= 即可工作。
  • @Danvil 并非总是如此,因为= 可能意味着很多东西,并且代码在某些情况下可能无法正常工作,因为根本没有生成函数。
  • 我会对operator= 不适用于类实例的情况感兴趣。
  • 上述here的一个更常见的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多