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<<
的声明中对应的省略。
编译器不应该回答你的问题吗?
我的意思是,编译器做了,我可能没有说出来,但是我将如何提供一个保持两个构造函数的实现(否则 main 方法无法执行它的调用,并且我不允许修改它虽然我相信教授在使变量 b const 时犯了一个错误
他可能是故意的,想让你把operator++()
设为const,虽然这很不常见。
【参考方案1】:
假设pounds
和b++
之后缺少的;
是拼写错误,我看到的错误是:
-
不明确的构造函数。您只需要第一个。
b
是 const,因此调用 totalPounds
会失败,因为它不是 const 方法。
b
是 const,因此后增量失败,因为它不是 const 方法。
5 + a
失败,因为没有匹配的 +
运算符可供使用。
b
是 const,所以 b + 1
失败,因为 +
不是 const 方法。
void
的返回值 operator<<
导致 cout
语句失败。
operator<<(ostream& os, const Weight&)
不是朋友,因此无法实际打印 Weight
的内部值。
【讨论】:
关于7
,如果它只输出totalPounds
就可以了(当然如果那个方法是const
)
@M.M:啊,那是真的。
谢谢你,这抓住了我没有抓住的一切!以上是关于C++ 代码片段执行的主要内容,如果未能解决你的问题,请参考以下文章
此 Canon SDK C++ 代码片段的等效 C# 代码是啥?