当我尝试对数组内容使用函数时,控制台中什么都没有显示

时间:2019-04-14 02:01:42

标签: c++

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

// main函数试图调用构造函数

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;
}

让我知道您是否需要更多代码!

1 个答案:

答案 0 :(得分:1)

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

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

#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;
}

尽管就安全性和智能指针而言,这并不是最好的选择,但我认为这相对来说很简单... :)感谢发布!

:: sorry我仍然无法评论:: 编辑为使用unique_ptr。感谢您的反馈道格! 编辑并重新测试->删除了make_unique中的内容,谢谢乔纳森·盖斯勒(Jonathan Geisler)!看起来好多了:)