类和对象实践
Posted
技术标签:
【中文标题】类和对象实践【英文标题】:Class and Object Practice 【发布时间】:2019-05-10 17:54:34 【问题描述】:我正在练习使用基本的对象和类。我知道我在语法上弄乱了一些东西,但不知道是什么。
#include <iostream>
using namespace std;
class Pizza
public:
string topping;
int slices;
void GetPizza(string topping, int slices)
topping = topping;
slices = slices;
;
int main()
Pizza pizza1;
pizza1.GetPizza("cheese", 8);
cout << pizza1.GetPizza;
return 0;
我正在尝试打印披萨的配料和片数1。我只是不断收到编译器错误。我还想尝试只打印顶部或切片编号,但也无法真正弄清楚。
编辑:
我的代码的 v2 与错误调用不匹配:
#include <iostream>
using namespace std;
class Pizza
public:
string topping;
int slices;
void GetPizza(string t, int s)
topping = t;
slices = s;
;
int main()
Pizza pizza1;
pizza1.topping("cheese");
cout << pizza1.topping("cheese");
return 0;
【问题讨论】:
你肯定弄乱了代码格式。请看ClangFormat。 使用这个:couttopping = topping;
不会做任何有用的事情。您的局部变量会影响外部范围内的变量。
您是否应该使用GetPizza()
而不是Pizza
类的正确构造函数?
【参考方案1】:
pizza1.GetPizza
是类成员函数。你不能把它喂给 cout。
如果你想打印一些东西,打印类成员变量。像这样:
cout << pizza1.topping;
cout << pizza1.slices;
同样在GetPizza
函数中,你有以下几行:
topping = topping;
slices = slices;
编译器如何知道左侧指的是成员变量,右侧指的是函数参数(这可能是本意)?确保他们的名字不同。
void GetPizza(string t, int s)
topping = t;
slices = s;
重新编辑 v2:
pizza1.topping
不是函数。它是string
类型的成员变量。你不能这样称呼它:
pizza1.topping("cheese");
如果你想给它赋值,正确的语法是:
pizza1.topping = "cheese";
下一行也是如此。
【讨论】:
“确保他们的名字不同” - 我 100% 同意,但有 不同的选择:您可以使用this->topping
明确引用成员变量。但是,是的,一开始就没有阴影会更好。
所以我按照您的建议更改了变量名称,并尝试打印类变量,而不是通过调用函数进行打印。现在我收到“不匹配调用...”错误。我想如果你想写这样的东西,你会怎么做?我得到了类和变量的概念,但我对需要去哪里以及为什么更加模糊
我将尝试两个粘贴到我的问题中
我没有看到任何变化。
我试图编辑帖子,但它说在同行评审之前不会显示?对不起,我是这个网站的新手。我在 πάντα ῥεῖ 的回答上留下的评论总结了我的问题。【参考方案2】:
错误在这里
cout << pizza1.GetPizza;
根据您的实现,GetPizza 方法调用需要两个参数。因此,在打印时,您还需要传递这些参数,类似于您在下一行中所做的。
pizza1.GetPizza("cheese", 8);
【讨论】:
我的回答中提到了更多问题。 @πάντα ῥεῖ 我没有阅读您的答案,因为它不存在,而我自己写了答案。你必须很擅长在代码中找到整个错误,同时你必须鼓励我们,他们仍然试图在代码中找到错误。 @YatShan 我认为 πάντα ῥεῖ 意味着从答案复制内容到评论是不值得的。相反,该答案被“通过引用”合并到评论中(假装它被复制到评论中作为更详尽答案的示例)。 @JaMiT 我不明白你的评论。我没有从任何地方复制。我写了自己的答案,看着问题。 @YatShan 呃……什么?好的,我会在不使用代词的情况下再试一次。该答案已“通过引用”合并到评论中(为了理解 πάντα ῥεῖ 的初始评论,假装 πάντα ῥεῖ 的初始评论开始“还有更多问题”然后是描述这些问题的 πάντα ῥεῖ 的回答部分)。以上是关于类和对象实践的主要内容,如果未能解决你的问题,请参考以下文章