gpt4 book ai didi

c++ - 将父对象静态转换为子 C++

转载 作者:行者123 更新时间:2023-11-30 02:24:23 25 4
gpt4 key购买 nike

我有一个父类和一个子类,子类有一个父类没有的特定功能。我创建了一个 Parent 类型的 vector ,并向其中添加了一个 Child 类型的对象。我确定该项目是一个 child ,所以我尝试使用 static_cast 创建一个指向它的指针,以便使用它的子特定函数,但它拒绝转换并给出下面代码中描述的错误。

#include <vector>

//Parent Class
class Parent {
public:
Parent() {};
};

//Child Class
class Child : public Parent
{
public:
void childSpecificFunction() {};
};

int main()
{
//I know for a fact that the item is a child
std::vector<Parent> items;
items.push_back(Child());

//Static cast to use child specific function doesn't work
Child* childPtr = static_cast<Child*>(items[0]);
childPtr->childSpecificFunction();

//Gives intellisence error: no suitable conversion from "Parent" to "Child *" exists
}

为什么会这样?有没有更好的方法来处理这种事情?

谢谢。

最佳答案

Why is this happening

让我们剖析一下:

int main()
{
//I know for a fact that the item is a child
std::vector<Parent> items;
items.push_back(Child()); // <<<< You are copying and slicing here

//Static cast to use child specific function doesn't work
Child* childPtr = static_cast<Child*>(items[0]);
childPtr->childSpecificFunction(); // <<<<< undefined behavior

//Gives intellisence error: no suitable conversion from "Parent" to "Child *" exists
}

一个合适的修复

int main()
{
std::vector<std::unique_ptr<Parent>> items;
items.push_back(std::make_unique<Child>()); // <<< working with pointers,
// no slicing.

Child* childPtr = static_cast<Child*>(items[0].get());
childPtr->childSpecificFunction();
}

关于c++ - 将父对象静态转换为子 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402430/

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