我正在为我的编程类(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/