c++ - 当我尝试对数组的内容使用函数时,控制台中没有任何显示

标签 c++

我正在为我的编程类(class)编写一个程序,但我没有得到任何输出。它主要是关于类和 vector 的。如果我运行构造函数(称为 myDairy)并调用 myDairy().getDescription()(getDescription 是 dairy 类中的一个继承函数),我会得到我想要的输出。如果我将 myDairy 分配给一个 vector ,我不会在执行 basket[0].getDescription() 时得到任何输出。我想知道这是为什么以及如何解决它? 谢谢!

//尝试调用构造函数的主函数

milk myMilk = milk("Strawberry ", "2%");
dairy myDairy = dairy(false);

vector<groceries> basket;

basket.push_back(myMilk);
basket.push_back(myDairy);

basket[0].getDescription();
basket[1].getDescription();
myMilk.getDescription();
//the getDescription() function

void dairy::getDescription()
{
    //check if dairy is spoiled
    cout << "The dairy in your basket is ";

    if (mSpoiled == true)
        cout << "spoiled." << endl;
    else if (mSpoiled == false)
        cout << "not spoiled." << endl;
}

如果您需要更多代码,请告诉我!

最佳答案

我怀疑一些评论者指出继承存在一些问题。

杂货店是您的抽象类。乳制品是一个具体的类,但您希望有一个通用的方式来引用您的篮子。这可以按如下方式完成...

#include <iostream>
#include <memory>
#include <string>
#include <vector>

class Groceries {
public:
  Groceries() {}
  virtual void getDescription() = 0; //must be implemented by child
};

class Dairy : public Groceries { //inherited and must implement getDescription()
private:
  bool mSpoiled;

public:
  Dairy(bool isSpoiled) : mSpoiled(isSpoiled) {}

  void getDescription() override {
    std::cout << "The dairy in your basket is ";
    if (mSpoiled) {
      std::cout << "spoiled\n";
    }
    else {
      std::cout << "not spoiled\n";
    }
  }
};

int main(int argc, char* argv[]) {
    std::vector<std::unique_ptr<Groceries>> basket;
    std::unique_ptr<Dairy> myDairy = std::make_unique<Dairy>(false);
    basket.push_back(std::move(myDairy));
    basket[0]->getDescription();

    return 0;
}

虽然就安全性和智能指针而言这不是最好的,但我认为这相当简单......相对 :) 感谢发帖!

::抱歉我还是不能发表评论:: 编辑为使用 unique_ptr。感谢老哥的反馈! 编辑并重新测试 -> 删除了 make_unique 中的问题,感谢 Jonathan Geisler!看起来好多了:)

关于c++ - 当我尝试对数组的内容使用函数时,控制台中没有任何显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671382/

相关文章:

c# - C++ CLR win32 或其他?

c++ - C++分配内存时出错

c++ - 在 C++ DLL 和 Cpp/CLI 控制台项目之间传输对象 vector

c++ - 我如何在 linux 中使用 ctrl-c 使 wxTextCtrl 句柄

c++ - 无重复数的随机数生成器

c++ - 为什么 getline 正在读取我的整个 unicode 文件

c++ - 再次 double 四舍五入

c++ - 如何将迭代器类型转换为其原始结构

c++ - 分析 C++ 析构函数调用

c++ - ValueError : ['path' ] when installing pyfim