首先,我来自 Java 社区,并且仍然是 C++ 的学习者。
请查看以下课程
第二张图片显示了“GameObject”类的一个子类。它也有一个Display()
方法。GameObject类有5个子类,都有这个Display()
方法。那么,这种显示方式GameObject
是不是虚拟的呢?
我认为它不是抽象虚拟(100% 虚拟),因为Display()
inGameObject
显示了一些文本GameObject.cpp
无论如何,我不太确定。请帮忙!
首先,我来自 Java 社区,并且仍然是 C++ 的学习者。
请查看以下课程
第二张图片显示了“GameObject”类的一个子类。它也有一个Display()
方法。GameObject类有5个子类,都有这个Display()
方法。那么,这种显示方式GameObject
是不是虚拟的呢?
我认为它不是抽象虚拟(100% 虚拟),因为Display()
inGameObject
显示了一些文本GameObject.cpp
无论如何,我不太确定。请帮忙!
在 C++ 中,当且仅当在基类或类本身中明确声明虚函数时,虚函数才是虚函数。由于 GameObject 似乎没有基类,GameObject::Display()
因此必须声明为虚拟的,如果显示 GameObject 引用(或指针)应根据该引用背后的对象的实际(即运行时)类型来表现。在 GameObject.cpp 中有一个函数体并不意味着该函数不是纯虚拟的(Java 抽象的 C++ 等价物)。= 0
您可以通过在其声明中添加 a 来使该函数成为纯虚函数。不过,您可以为纯虚拟方法提供实现,例如,在实现该方法的派生类中显式调用默认实现:
class GameObject {
//...
public:
virtual void Display() = 0;
};
//GameObject.cpp
void GameObject::Display() {
/* do something */
}
//DerivedGO.h
class DerivedGO : public GameObject {
public:
// virtual can be left out here, since it's declared virtual in the base class
virtual void Display() {
prepDisplay(); // do some preparation
GameObject::Display(); //call the original/default implementation
}
};
但是请注意,使函数成为纯虚函数意味着使包含类和每个派生类都成为抽象类,并且不会覆盖其基类中的所有纯虚函数。