C++ 代码片段执行

Posted

技术标签:

【中文标题】C++ 代码片段执行【英文标题】:C++ Code Snippet Execution 【发布时间】:2015-12-29 00:52:06 【问题描述】:

我正在写一份过去的试卷,我想知道是否有人可以解释这个问题的解决方案:假设这个(不正确的)sn-p 代码是一个头文件。

#include <iostream>
using namespace std;
class Weight

public:
    Weight(const int = 0, const int = 0);
    Weight(const int = 0);
    int totalPounds();
    Weight operator+(const Weight);
    Weight operator++();
    Weight operator++(int);
private:
    int stones;
    int pounds
;
void operator<<(ostream& os, const Weight&);

并且在 main 方法中执行此操作,并假设 .cpp 类与所述头文件的实现存在。

Weight a(12);
const Weight b(15, 3);
const int FIXED_WEIGHT = b.totalPounds();
Weight combined = a + b;
++a;
b++
combined = 5 + a;
a = b + 1;
cout << a << b;

哪几行会导致头文件出错?需要对头文件进行哪些修改?

我真的很困惑,我们几乎没有在课堂上介绍默认参数...我尝试删除它们以使代码正常工作,但我认为这不是解决方案。还有const int = 0这行代码是什么意思,我将如何基于此实现一些东西。这不会导致定义模糊的构造函数吗?

【问题讨论】:

const int =0 -> 如果没有给出参数,则默认为 0。这使得带有单个参数的构造函数变得多余。所以对于“Weight a(12);”,程序不知道使用哪个构造函数。 最明显的错误是using namespace std;std::operator&lt;&lt;的声明中对应的省略。 编译器不应该回答你的问题吗? 我的意思是,编译器做了,我可能没有说出来,但是我将如何提供一个保持两个构造函数的实现(否则 main 方法无法执行它的调用,并且我不允许修改它虽然我相信教授在使变量 b const 时犯了一个错误 他可能是故意的,想让你把operator++()设为const,虽然这很不常见。 【参考方案1】:

假设poundsb++ 之后缺少的; 是拼写错误,我看到的错误是:

    不明确的构造函数。您只需要第一个。 b 是 const,因此调用 totalPounds 会失败,因为它不是 const 方法。 b 是 const,因此后增量失败,因为它不是 const 方法。 5 + a 失败,因为没有匹配的 + 运算符可供使用。 b 是 const,所以 b + 1 失败,因为 + 不是 const 方法。 void 的返回值 operator&lt;&lt; 导致 cout 语句失败。 operator&lt;&lt;(ostream&amp; os, const Weight&amp;) 不是朋友,因此无法实际打印 Weight 的内部值。

【讨论】:

关于7,如果它只输出totalPounds就可以了(当然如果那个方法是const @M.M:啊,那是真的。 谢谢你,这抓住了我没有抓住的一切!

以上是关于C++ 代码片段执行的主要内容,如果未能解决你的问题,请参考以下文章

有趣的 C++ 代码片段,有啥解释吗? [复制]

以下代码片段 C++ 的说明

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

C++ 代码片段(积累)

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化