gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:22:24 40 4
gpt4 key购买 nike

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

请看下面的类

enter image description here

enter image description here

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

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

反正我不是很确定。请帮忙!

最佳答案

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

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

关于c++ - 虚拟/抽象方法如何在类图中显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070508/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com