0

首先,我来自 Java 社区,并且仍然是 C++ 的学习者。

请查看以下课程

在此处输入图像描述

在此处输入图像描述

第二张图片显示了“GameObject”类的一个子类。它也有一个Display()方法。GameObject类有5个子类,都有这个Display()方法。那么,这种显示方式GameObject是不是虚拟的呢?

我认为它不是抽象虚拟(100% 虚拟),因为Display()inGameObject显示了一些文本GameObject.cpp

无论如何,我不太确定。请帮忙!

4

1 回答 1

2

在 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
  }
};

但是请注意,使函数成为纯虚函数意味着使包含类和每个派生类都成为抽象类,并且不会覆盖其基类中的所有纯虚函数。

于 2013-02-25T15:50:47.503 回答