gpt4 book ai didi

c++ - 派生类映射

转载 作者:行者123 更新时间:2023-11-30 02:31:58 26 4
gpt4 key购买 nike

我有一个基类

class Person{
public:
Person(string name , int age ){
this -> name = name;
this -> age = age;
}
virtual void getInfo(){
cout << "Person " << name << " " << age;
}
void add(string name , const Person & b){
a[name] = b
}
protected:
string name;
int age;
map<string , Person > a;
};

包含对象类型 Person 的映射。我想将各种派生类推送到该映射中,例如

派生类

class Kid : public Person{
public:
Kid(string name, int age):Person(name,age){};
virtual void getInfo( ){
cout << "Kid " << name << " " << age;
}
};

我希望 Person 类的 add 方法具有以下特性

Person one("John",25);
one.add("Suzie",15);

失败了。我知道我可以使用指针重新编写代码,例如

map<string , Person*> a   
void add( string name , Person *b){
a[name] = b;
}
Person one("John",25);
one.add(new Kid("Suzie",15))

但是有没有办法不用指针就可以实现呢?

最佳答案

不,不使用引用或指针就无法获得多态性。

这个问题很容易理解,认为非指针对象需要存储整个类数据(包括vtable)。

这意味着 map<string, person>将存储在某处person sizeof(person) 中的实例插槽。

但是一个sizeof(person)不能包含足够的数据来存储 person 子类的附加信息.这导致 object slicing .

关于c++ - 派生类映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com