gpt4 book ai didi

c++ - 当 C++ 中的参数是父类类型时,如何调用子类的方法?

转载 作者:太空狗 更新时间:2023-10-29 19:57:21 25 4
gpt4 key购买 nike

我有以下代码(简化):

#include <cstdio>

class parent
{
public:
virtual void do_something() const
{
printf("hello I'm the parent class\n");
}
};

class child : public parent
{
public:
virtual void do_something() const
{
printf("hello I'm the child class\n");
}
};

void handle(parent p)
{
p.do_something();
}

int main()
{
child c;
handle(c);
return 0;
}

这会打印hello I'm the parent class,即使我传递了一个child类型的参数。我怎样才能让 C++ 像 Java 一样运行并调用子类的方法,打印 hello I'm the child class

最佳答案

通过引用(或者,可能是 const 引用)接受参数:

void handle (parent & p)
// note this ^
{
p.do_something();
}

在你的例子中,slicing发生:childparent 部分被提取为 parent 类型的单独对象并转到函数。

如果要将不同的子类放入一个集合中,通常的解决方案是使用智能指针,例如std::unique_ptr。或 std::shared_ptr .

关于c++ - 当 C++ 中的参数是父类类型时,如何调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871730/

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