为什么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;
}
我想使用 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;
}