c++ - 防止通过纯虚函数实例化类?

标签 c++ class polymorphism abstract-class

我正在看我书中的以下代码:

class Shape
{
    public:
        Shape(){}
        ~Shape(){}
        virtual long getArea() = 0; // Pure virtual function
        virtual long getPerim() = 0;
        virtual void draw() = 0;
};

现在它说这些虚函数使类抽象(我从Java中理解),因此无法实例化该类。

但是,它说:“通过在类声明中包含一个或多个虚函数,类是抽象数据类型。”

如果我用 ONE 纯虚函数声明一个类,这是否意味着:

class Shape
{
    public:
        Shape(){}
        ~Shape(){}
        virtual long getArea() = 0; // Only pure virtual function
        virtual long getPerim(){}
        virtual void draw(){}
};

是不是整个类都变得抽象了?因为如果一个类有 100 多个方法,如果我决定稍后将其抽象化,则为每个方法编写 =0 会很乏味。

最佳答案

是的,单个纯 virtual 方法足以使类抽象。

此外,如果没有其他方法适合纯析构函数,您始终可以将析构函数设为纯虚拟

此外,您的析构函数可能应该是 virtual,因为您显然将从此类继承。如果您计划通过指向基类型的指针删除派生类型的对象,则这是强制性的。

关于c++ - 防止通过纯虚函数实例化类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031627/

相关文章:

c++ - 使用C++确定三个数中最大的数

python - 通过配置文件创建函数实例

java - 如何为每个对象使用变量

C++顺序搜索找不到最后一个元素

c++ - 无效的 std::vector 迭代器

java - 有没有读取UNIX/etc/group文件的Java包?

c++ - 如何强制子相同的虚函数首先调用其父虚函数

java - 多态性:从父类(super class)变量调用子类方法

c++ - 具有不同签名的多态性和重载函数

c++ - 如何检查 CSV 文件末尾是否为 '\n'