为什么push_back()之后vector中parent的成员值丢失了? (C++)

Why is the member value of parent lost in the vector after push_back()? (C++)

我想使用 push_back() 将 Child 的一个实例(Parent 是 Child 的基础 class)推送到一个向量中。但随后 Parent 成员的价值丢失了。 在下面的示例中,我希望在将向量写入控制台时看到 70,但我得到的是随机值。这是什么原因造成的?

main.cpp:

void demo(vector<Child> &ch) {
Child c(4);
c.setPrice(70);
cout << c.getPrice() << endl; // 70
ch.push_back(c);
cout << ch[ch.size()-1].getPrice() << endl;  // random value
}
int main()
{
 vector<Child> ch;
 demo(ch);
 return 0;
}

Child.h:

#ifndef CHILD_H_INCLUDED
#define CHILD_H_INCLUDED
#include "Parent.h"
class Child : public Parent
{
private:
    int siz;
public:
    Child();
    ~Child();

    Child(int);
    Child(const Child&);

    int getSiz() const;

    void setSiz(int);
};


#endif // CHILD_H_INCLUDED

Child.cpp:

#include "Child.h"

Child::Child()
{
}

Child::Child(int siz)
{
    this->siz = siz;
}

Child::Child(const Child& other)
{
    siz = other.siz;
}

Child::~Child () {

}

int Child::getSiz() const
{
    return siz;
}

void Child::setSiz(int s)
{
    siz = s;
}

Parent.h:

#ifndef PARENT_H_INCLUDED
#define PARENT_H_INCLUDED
class Parent
{
private:
    int price;
public:
    Parent();
    ~Parent();

    Parent(int);
    Parent(const Parent&);

    int getPrice() const;

    void setPrice(int);
};

#endif // PARENT_H_INCLUDED

Parent.cpp:

#include "Parent.h"

Parent::Parent()
{
}

Parent::Parent(int price)
{
    this->price = price;
}

Parent::Parent(const Parent& other)
{
    price = other.price;
}

Parent::~Parent () {

}

int Parent::getPrice() const
{
    return price;
}

void Parent::setPrice(int p)
{
    price = p;
}

非常感谢您的帮助!

child的复制构造函数只复制child部分。它还应该调用 parent 的复制构造函数,让它复制 parent 成员。

Child::Child(const Child& other) : Parent(other)
{
    siz = other.siz;
}