多态继承不覆盖基类方法

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

Luc*_*ore 5

您尚未将方法标记为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)