将子类对象传递给采用超类对象的函数
Passing a subclass object to a function that takes superclass object
>假设以下代码:
class Event {
public:
virtual void execute() {
std::cout << "Event executed.";
}
}
class SubEvent : public Event {
void execute() {
std::cout << "SubEvent executed.";
}
}
void executeEvent(Event e) {
e.execute();
}
int main(int argc, char ** argv) {
SubEvent se;
executeEvent(se);
}
执行时,程序输出"事件已执行",但我想执行子事件。我该怎么做?
您正在按值传递Event
。该函数获取自己的参数副本,这是一个Event
对象,而不是SubEvent
。您可以通过传递引用来解决此问题:
void executeEvent(Event& e)
{// ^
e.execute();
}
这称为对象切片。它相当于:
SubEvent se;
Event e{se};
e.execute();
相关文章:
- 给定一个指向对象的超类指针,如何获取对象的大小?
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 确保指向超类的指针指向c++中某个子类的对象
- 按值将对象传递给 SubClass 构造函数,导致超类的构造函数不调用
- 如何在接口类中创建一个超类对象
- cpp 从需要超类对象的函数访问子类对象方法
- 制作可以存储子类对象的超类类型的向量
- C++检查对象是否是给定超类的后代
- C++编译器如何知道具有超类的对象的大小
- 将子类对象传递给采用超类对象的函数
- 创建子类对象时, 是为超类创建的第二个对象
- 如何检索添加到由其超类对象组成的集合中的派生对象
- 访问超类类型成员对象的受保护成员 - 一个优雅的解决方案
- 当对象不是动态分配的(不是指针)时,是否可以从超类对象转换到子类
- 如何将对象'cast'为其超类继承的类?
- c++继承.对象调用超类方法而不是自己的方法
- 如何调用一个方法,该方法需要一个子类对象,该子类对象由指向其超类的指针引用
- 为什么我们需要一个超类的指针指向子类的对象?
- 在超类需要参数的地方构造不带参数的对象
- 通过值将子类对象传递给接受超类对象的函数是定义良好的行为吗