bem*_*sed 1 c++ polymorphism inheritance vector
我的基类:
class Item
{
protected:
int count;
string model_name;
int item_number;
public:
Item();
void input();
}
Run Code Online (Sandbox Code Playgroud)
我的派生类:
class Bed : public Item
{
private:
string frame;
string frameColour;
string mattress;
public:
Bed();
void input();
}
Run Code Online (Sandbox Code Playgroud)
现在我所有的输入函数都试图输出正在使用的方法:
void Item::input()
{
cout<<"Item input"<<endl;
}
void Bed::input()
{
cout<<" Bed Input"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
当我在main中调用函数时,我想使用派生类输入,但目前项输入是.
主要:
vector<Item> v;
Item* item;
item= new Bed;
v.push_back(*item);
v[count].input();
count++;
Run Code Online (Sandbox Code Playgroud)
我已经按照我所拥有的书中的方法进行了操作,但我想我可能会对如何创建存储在向量中的新对象感到困惑.
任何帮助都会很棒,谢谢Hx
您尚未将方法标记为virtual.
此外,因为你有一个vector对象,而不是指针,你将遇到对象切片.虽然它会编译,但是不正确.
正确的方法是使用指针或智能指针的向量.
class Item
{
//....
virtual void input(); //mark method virtual in base class
};
class Bed : public Item
{
//....
virtual void input();
};
vector<Item*> v;
Item* item = new Bed;
v.push_back(item);
//...
//remember to free the memory
for ( int i = 0 ; i < v.size() ; i++ )
delete v[i];
Run Code Online (Sandbox Code Playgroud)