Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;具有良好的编程风格_C++_Oop_Methods - Fatal编程技术网

C++ C++;具有良好的编程风格

C++ C++;具有良好的编程风格,c++,oop,methods,C++,Oop,Methods,你认为我应该使用cout吗 还是应该返回数组 不。该类有3个私有成员,最好不要将它们暴露在外部,这在大多数情况下会导致紧密耦合 我应该用cout吗 还是应该返回数组 不。该类有3个私有成员,最好不要将它们暴露在外部,这在大多数情况下会导致紧密耦合 如果使用cout我宁愿将其重命名为PrintInventory,并提供一个可选参数: void PrintInventory(std::ostream &output = std::cout); 通过这种方式,您可以将库存输出到其他流

你认为我应该使用
cout吗
还是应该返回数组

不。该类有3个
私有
成员,最好不要将它们暴露在外部,这在大多数情况下会导致紧密耦合

我应该用cout吗 还是应该返回数组

不。该类有3个
私有
成员,最好不要将它们暴露在外部,这在大多数情况下会导致紧密耦合


如果使用cout我宁愿将其重命名为
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(std::cerr); // prints to stderr, for example

我宁愿将其重命名为
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(std::cerr); // prints to stderr, for example

在这种情况下,由于该方法被称为
DisplayInventory
,因此人们不会期望它返回任何内容,而是实际以某种方式向用户显示库存。这与“规则”是一致的,规则规定你应该告诉你的对象该做什么,而不是问他们关于他们状态的问题

在一个简单的应用程序中,使用
cout
与用户交互是完全可以接受的;另一种选择是使用GUI显示信息

您也可以这样看:要将库存显示为标准输出,您必须在某处使用
cout
。在我看来,将其封装在类方法中当然比使用getter公开所有数据(从而打破“告诉,不要问”)并在类外打印要好


如果你想变得更花哨,并使输出可定制,你可以创建某种格式化程序类,并将其传递给显示函数(Sergey的答案是这个原理的一个变体)。

在这种情况下,由于该方法被称为
DisplayInventory
,人们不会期望它返回任何东西,但实际上是以某种方式向用户显示库存。这与“规则”是一致的,规则规定你应该告诉你的对象该做什么,而不是问他们关于他们状态的问题

在一个简单的应用程序中,使用
cout
与用户交互是完全可以接受的;另一种选择是使用GUI显示信息

您也可以这样看:要将库存显示为标准输出,您必须在某处使用
cout
。在我看来,将其封装在类方法中当然比使用getter公开所有数据(从而打破“告诉,不要问”)并在类外打印要好


如果您想变得更花哨,并使输出可定制,可以创建某种格式化程序类并将其传递给显示函数(Sergey的答案是这一原理的变体)。

答案取决于您的任务。如果需要显示变量,请使用一些流来显示。如果程序中的其他类需要来自SGetraenkeAutomat类的数据,则应该为每个私有成员提供公共getter。例如:

int get_ColaAnzahl()
{
 return  m_nColaAnzahl;
}
正如我在您的案例中所看到的那样,创建一些基类(让我们命名它)会更好:

然后将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;
};
类sgetraenke自动机
{
公众:
//这种方法
无效库存(){
用于(自动饮料:饮料){

std::cout答案取决于您的任务。如果您需要显示变量,请使用一些流来显示。如果您程序中的其他类需要来自SGetraenkeAutomat类的数据,则应为每个私有成员提供公共getter。例如:

int get_ColaAnzahl()
{
 return  m_nColaAnzahl;
}
正如我在您的案例中所看到的那样,创建一些基类(让我们命名它)会更好:

然后将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;
};
类sgetraenke自动机
{
公众:
//这种方法
无效库存(){
用于(自动饮料:饮料){

std::通常最好有一个toString()之类的东西方法,该方法创建一个字符串化的对象表示,然后可以打印到您喜欢的任何流。或者也可以像下一个注释建议的那样返回结构。根据您想要做的事情,该方法被称为
Display…
,因此我希望它使用cout或gui。如果它返回数组中的清单,它将被调用d
获取…
。你拥有的是自我-consistent@KaiIskratsch谢谢你的评论。你能给我一个小例子吗?这种方法最简单的方法就是使用std::stringstream,并用dislpay中相同的输出给它,然后以std::string的形式返回结果。通常最好使用类似于toString()的东西方法,该方法创建一个字符串化的对象表示,然后可以打印到您喜欢的任何流。或者也可以像下一个注释建议的那样返回结构。根据您想要做的事情,该方法被称为
Display…
,因此我希望它使用cout或gui。如果它返回数组中的清单,它将被调用d
获取…
。你拥有的是自我-consistent@KaiIskratsch谢谢你的评论。你能给我一个小例子吗?这种方法最简单的方法就是使用std::stringstream并将其与dislpay中的输出相同,然后将结果作为std::string返回。我应该公开它们吗?因为我想播放资源清册。@MyNewName最好创建一个公共成员方法来显示资源清册,将它们全部封装在类中。那么我是否应该将它们公开?因为我想显示资源清册。@MyNewName最好创建一个公共成员方法来显示资源清册,将它们全部封装在类中。