gpt4 book ai didi

c++ - 从基类型数组 (C++) 中的实例调用重写方法

转载 作者:太空狗 更新时间:2023-10-29 23:35:51 25 4
gpt4 key购买 nike

我有一个名为 Effect 的基类,其定义如下:

class Effect
{
public:
virtual void apply(int a, int b);
};

void Effect::apply(int a, int b)
{
}

还有一些Effect的子类,都是这样定义的:

#pragma once

#include "Effect.h"

class SomeSubclassOfEffect: public Effect
{
public:
void apply(int a, int b);
};

void SomeSubclassOfEffect::apply(int a, int b)
{
//Magic
}

现在,在我的应用程序的其他部分,我有这个:

Effect effects[6]...

effects[0] = SomeSubclassOfEffect();

我想做的是通过 effects[whatever].apply(x, y) 调用相应的覆盖版本的 apply(int a, int b) ,但我得到的是父类的。为什么我会得到这个结果?

最佳答案

C++ 默认使用值语义,而不是引用语义,所以 effects[0] = SomeSubclassOfEffect(); slices 所有子特定信息,只留下家长信息。

关于c++ - 从基类型数组 (C++) 中的实例调用重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074939/

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