如何在类图中显示虚拟/抽象方法?

时间:2013-02-25 15:32:11

标签: c++ visual-studio-2010 class uml class-diagram

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

请查看以下课程

enter image description here

enter image description here

第二张图显示了“GameObject”类的子类。它还有一个Display()方法。 GameObject类有5个子类,它们都有这个Display()方法。那么,GameObject中的这种显示方法是虚拟的吗?

我认为它不是抽象虚拟(100%虚拟),因为Display()中的GameObject会在GameObject.cpp中显示一些文字

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

1 个答案:

答案 0 :(得分:2)

在C ++中,当且仅当已经在基类或类本身中显式声明虚拟时,虚函数才是虚拟的。由于GameObject似乎没有基类,GameObject::Display()必须被声明为虚拟,如果显示GameObject引用(或指针)应该根据该引用后面的对象的实际(即运行时)类型进行操作。 在GameObject.cpp中拥有一个函数体并不意味着该函数不是纯虚函数(java的抽象的C ++等价物)。您可以通过在其声明中添加= 0来使该函数成为纯虚函数。不过,您可以为纯虚方法提供实现,例如有一个默认实现,您在实现该方法的派生类中显式调用:

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

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