LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 174|回复: 0

定义的纯虚函数

[复制链接]
发表于 2024-2-3 23:08:38 | 显示全部楼层 |阅读模式
抽象类中的纯虚函数可以定义或具有实现。 只能使用完全限定的语法调用此类函数:

abstract-class-name::function-name()

在设计基类包含纯虚析构函数的类层次结构时,定义的纯虚函数非常有用。 这是因为对象销毁期间会始终调用基类析构函数。 请考虑以下示例:

// deriv_RestrictionsOnUsingAbstractClasses.cpp
// Declare an abstract base class with a pure virtual destructor.
// It's the simplest possible abstract class.
class base
{
public:
    base() {}
    // To define the virtual destructor outside the class:
    virtual ~base() = 0;
    // Microsoft-specific extension to define it inline:
//  virtual ~base() = 0 {};
};

base::~base() {} // required if not using Microsoft extension

class derived : public base
{
public:
    derived() {}
    ~derived() {}
};

int main()
{
    derived aDerived; // destructor called when it goes out of scope
}
该示例演示了 Microsoft 编译器扩展如何支持向纯虚 ~base() 添加内联定义。 还可以使用 base::~base() {}.在类外定义它。

当对象 aDerived 超出范围时,将调用类 derived 的析构函数。 编译器生成代码以在 derived 析构函数之后隐式调用类 base 的析构函数。 纯虚函数 ~base 的空实现确保至少函数的某个实现存在。 如果没有,链接器将为隐式调用生成未解析的外部符号错误。

备注

在前面的示例中,纯虚函数 base::~base 是从 derived::~derived 隐式调用的。 还可使用完全限定的成员函数名称显式调用纯虚函数。 此类函数必须具有实现,否则调用会在链接时导致错误。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表