C++做一个没有任何数据字段的抽象类需要一个构造函数

C++ Does an abstract class without any data fields need a constructor?

本文关键字:一个 抽象类 字段 构造函数 C++ 任何 数据      更新时间:2023-10-16

没有任何数据字段的抽象类需要构造函数吗?

此外,由于makeAMove函数的实现在派生类中,是否有必要为该Player类创建一个单独的实现文件,或者这个单独的.h文件可以吗?

#pragma once // include guard
#include "Board.h"
class Player
{
    public:
        virtual void makeAMove(Board &myBoard) = 0; // pure virtual function
};

每个类都有一个构造函数,可能不止一个。然而,您并不总是需要声明自己定义构造函数,因为在有利的条件下,这是隐式发生的。你的例子就是这样。

您也不需要实现文件,因为它不包含任何内容。

是的,如果抽象类的目的是通过虚拟函数提供多态功能,也就是说,该类是一个接口。

基类应该有一个虚拟dtor,以确保正确销毁多态实例。

一个好的规则是:每次设计类层次结构以通过动态绑定提供多态功能时,它的基类都应该有一个虚拟dtor。

关于类和头,C++并没有限制您为每个文件编写一个类(就像Java那样)。

对于每个文件写一个类或多个类,什么更正确?依情况而定,我认为这是主观的。但一般来说,C和C++使用头来提供功能,而功能通常意味着不止一个类。