通过纯虚函数防止类的实例化?

7 c++ polymorphism abstract-class class

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

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

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

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

这是否意味着如果我声明一个具有一个纯虚函数的类:

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

整个班级变得抽象吗?因为如果一个类有100多个方法,=0如果我决定稍后将它抽象化,那么为每个方法编写它将会很繁琐.

Luc*_*ore 12

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

此外,virtual如果没有其他方法适合纯粹,你总是可以使析构函数变得纯净.

另外,你的析构函数应该是virtual,因为你显然要继承这个类.如果您计划通过指向基类型的指针删除派生类型的对象,则必须执行此操作.