我正在为我的编程课编写一个程序,但没有得到任何输出。它主要是关于类和向量的。如果我运行构造函数(称为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;
}
让我知道您是否需要更多代码!
答案 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)!看起来好多了:)