gpt4 book ai didi

c++ - 在基类本身中定义 "pure"虚函数是否有意义?

转载 作者:IT老高 更新时间:2023-10-28 23:11:38 25 4
gpt4 key购买 nike

在基类中定义通用虚函数的好处是我们不必在派生类中重新定义它们。

即使我们在基类本身中定义了虚函数,我们仍然必须在派生类中定义它们。

#include <iostream>
using namespace std;

class speciesFamily
{
public:
virtual void numberOfLegs () = 0;
};

void speciesFamily :: numberOfLegs ()
{
cout << "\nFour";
}

class catFamily : public speciesFamily
{
public:
void numberOfLegs ()
{
speciesFamily :: numberOfLegs ();
}
};

这肯定看起来很花哨,但是在任何情况下在基类本身中定义纯虚函数是有益的吗?

最佳答案

两件事:

首先,有一个经常被引用的边界线场景:假设您想要一个抽象基类,但您没有虚拟函数可以放入其中。这意味着您没有使纯虚拟化的功能。现在有一种解决方法:由于您总是需要一个虚拟析构函数,因此您可以将其设为纯析构函数。但是你也需要一个实现,所以这是你的候选人:

struct EmptyAbstract
{
virtual ~EmptyAbstract() = 0; // force class to be abstract
};
EmptyAbstract::~EmptyAbstract() { } // but still make d'tor callable

这可以帮助您最小化抽象类的实现大小。不知何故,这是一个微优化,但如果它符合语义,那么有这个选项很好。

第二点是你总是可以从派生类调用基类函数,所以你可能只想拥有一个“通用”功能集,尽管不想要任何抽象实例。再次,纯虚拟定义函数:

struct Base
{
virtual void foo() = 0;
};

struct Derived : Base
{
virtual void foo()
{
Base::foo(); // call common features
// do other stuff
}
};

void Base::foo() { /* common features here */ }

关于c++ - 在基类本身中定义 "pure"虚函数是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063971/

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