代码之家  ›  专栏  ›  技术社区  ›  MyNewName

C++使用方法良好的编程风格

  •  1
  • MyNewName  · 技术社区  · 8 年前

    你认为我应该用什么 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;
    }
    

    这是一种好的编程风格吗?

    ->我不这么认为,但也许你们中有人能给我解释一下。

    4 回复  |  直到 8 年前
        1
  •  2
  •   Sergei Tachenov    8 年前

    我宁愿将其重命名为 PrintInventory 并提供了一个可选参数:

        void PrintInventory(std::ostream &output = std::cout);
    

    通过这种方式,您可以将库存输出到其他流,同时您不必每次打印到stdout时都指定它。

    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
    
        2
  •  1
  •   songyuanyao    8 年前

    还是应该返回数组?

    不。全班有3人 private 成员,最好不要将它们暴露在外面,这在大多数情况下会导致紧密耦合。

    我应该使用cout<&书信电报;方法?

    如果它满足了请求,那应该没问题。

        3
  •  1
  •   Emil Styrke    8 年前

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

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

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

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

        4
  •  1
  •   Denis Zaikin    8 年前

    答案取决于你的任务。如果需要显示变量,请使用一些流进行显示。如果程序中的其他类需要来自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;
    };
    

    我想你理解我上面描述的想法。