从子类中的抽象类调用方法
Call method from abstract class in child class
我有 2 个抽象类Organism
和Animal
和普通Fox
类
class Organism {
...
virtual void action() = 0;
void escape();
};
class Animal : public Organism {
...
void action() {...}
};
class Fox : public Animal {
...
void action() {...}
};
我有一个 Organism 和方法数组escape()
只会为类Fox
的对象调用(我必须在Organism
中定义escape()
)如何调用action()
escape()
中Animal
中定义的方法?
此代码:
void Organism::escape() {
...
this->action();
...
}
调用action()
中定义的Fox
。我写不this->Organism::action()
因为这种方法在 Organism 中是纯虚拟的,this->Animal::action();
也是错误的,所以我收到错误消息:
限定名不是类"有机体"或其基类的成员
似乎您想将动物特定的操作实现与其他操作实现区分开来。我建议在两个不同的成员函数中将这两种不同的含义分开。因此,您可以有一个(公共)action
和特定的动物实现,可能只在escape
内使用,因此受到保护:
class Organism {
...
virtual void action() = 0;
void escape() {
// refer specifically to animal specific code
animalAction();
}
protected:
virtual void animalAction()=0;
};
class Animal : public Organism {
...
virtual void action() {
animalAction();
}
virtual void animalAction() {
// animal specific code
};
};
class Fox : public Animal {
...
void action() {...}
};
你可以显式地确保你的指针是Fox
类(或其派生的),只需使用dynamic_cast
并检查结果:
// Organism * array[];
Fox * pFox = dynamic_cast<Fox*>(array[i]);
if(pFox != nullptr){
pFox->escape();
}
如果提供的指针不是指向Fox
类或其派生之一的指针,则dynamic_cast
将返回nullptr
。
相关文章:
- 在c++中多次调用方法
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 接收字符串并使用它来调用方法C++
- 使用 gmock c++ 在真实对象上调用方法
- 不带预处理器的调用方法/文件的文件名/行号
- JNI从Android调用C++方法
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何使用接口指针调用方法,该指针是其具体类的一部分,而不是接口的一部分
- 从内部类中的方法从包含类调用方法
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 为什么派生类的实例从基类调用方法?
- 实例化对象并调用方法,使用单行语法在 C# 或 C++ 中返回值?
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 通过模板函数对未知类型调用方法
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- 创建一个C++DLL以从C#DLL调用方法
- 如何从qt中的类中调用方法
- 如何在不迭代的情况下对数组中的每个元素调用方法
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- C ++:如何在不创建对象的情况下在主函数中调用方法