你有什么用,我应该在方法中使用cout <<
吗?或者我应该返回一个数组?因为我需要多一个返回value
。
我有课程SGetraenkeAutomat
,这里是.h
文件
class SGetraenkeAutomat
{
public:
// this method
void DisplayInventory();
SGetraenkeAutomat();
SGetraenkeAutomat(int nColaAnzahl, int nSpriteAnzahl, int nFantaAnzahl);
virtual ~SGetraenkeAutomat();
private:
int m_nColaAnzahl;
int m_nSpriteAnzhal;
int m_nFantaAnzahl;
};
void SGetraenkeAutomat::DisplayInventory()
SGetraenkeAutomat.cpp
void SGetraenkeAutomat::DisplayInventory(){
std::cout << m_nColaAnzahl;
std::cout << m_nSpriteAnzahl;
std::cout << m_nFantaAnzahl;
}
这是一种很好的编程风格吗?
- &GT;我不这么认为,但也许有人可以解释一下。
答案 0 :(得分:2)
我宁愿将其重命名为PrintInventory
并提供一个可选参数:
void PrintInventory(std::ostream &output = std::cout);
通过这种方式,您可以将广告资源输出到其他广告系列,同时每次要打印到标准输出时都不必指定广告资源。
void SGetraenkeAutomat::PrintInventory(std::ostream &output){
output << m_nColaAnzahl;
output << m_nSpriteAnzahl;
output << m_nFantaAnzahl;
}
这样你就可以做到:
automat.PrintInventory(); // prints to stdout
或类似
automat.PrintInventory(std::cerr); // prints to stderr, for example
答案 1 :(得分:1)
或者我应该返回一个数组吗?
没有。该课程有3个private
成员,最好不要将它们暴露在外面,这导致在大多数情况下紧密耦合。
我应该使用cout&lt;&lt;在方法?
如果它满足要求,那应该没问题。
答案 2 :(得分:1)
在这种情况下,因为该方法被称为DisplayInventory
,所以不会期望它返回任何内容,但实际上以某种方式向用户显示库存。这符合Tell, Don't Ask&#34;规则&#34;它说你应该告诉你的对象该做什么,不要问他们关于他们状态的问题。
在一个简单的应用程序中,使用cout
与用户交互是完全可以接受的;另一种选择是使用GUI来显示信息。
您也可以这样看待:要将广告资源显示到标准输出,您必须在某处使用cout
。在我看来,将它封装在类方法中比用getter公开所有数据(因此打破&#34;告诉,不要问&#34;)并在类外打印它当然更好(在我看来)。
如果你想获得更多的想象力并获得可自定义的输出,你可以创建某种格式化程序类并将其传递给显示功能(谢尔盖的回答是这个原则的变体)。
答案 3 :(得分:1)
答案取决于你的任务。如果需要显示变量而不是使用某些流来显示。如果您的程序中的其他类需要来自您的SGetraenkeAutomat类的数据,那么您应该为每个私有成员提供公共getter。例如:
int get_ColaAnzahl()
{
return m_nColaAnzahl;
}
正如我在你的案例中所看到的,最好创建一些基类(让我们把它命名为Drink):
struct Drink {
int count;
std::string name;
}
然后将您的SGetraenkeAutomat类修改为:
class SGetraenkeAutomat
{
public:
// this method
void DisplayInventory() {
for (auto drink: drinks) {
std::cout << drink.name << ": " << drink.count << std::endl;
}
}
void addDrink(const Drink& drink) {
drinks.push_back(drink);
};
SGetraenkeAutomat();
virtual ~SGetraenkeAutomat();
private:
std::vector<Drink> drinks;
};
我想你理解我上面描述的想法。