是什么使某物成为C ++中的抽象类[重复]

||                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
  纯粹的虚拟礼物是死了吗 在C ++中,是的。由于它没有
abstract
关键字或同等的关键字,因此,使类抽象的常用习惯是在其中声明一个纯虚函数(防止实例化)。* 出于同样的原因,在C ++中,接口和抽象类之间没有太大区别-C ++接口只是一个仅包含纯虚函数的类。 *更新:防止类实例化的另一种方法是声明其构造函数
protected
private
。后者意味着它也不能被子类化,但是前者也不能防止子类化,因此从理论上讲,受保护的构造函数也可能是抽象类的标志,是强制子类化的一种方式。但是,我在实践中从未见过。我相信这是因为抽象类被设计为可扩展的,在实践中几乎总是意味着它具有虚函数。我们之所以希望它是抽象的,是因为尚不知道其实现的某些部分,因此必须在其子类中对其进行定义。这正是纯虚函数的含义。     
使类抽象的唯一方法是,它具有一个或多个未实现的纯虚函数,可能是派生的。
struct A {                    // abstract
    virtual void f() = 0;
};

struct B : public A {        // abstract
};

struct C : public B {        // not abstract
    void f() {}
};
请注意,A还应该有一个(可能不是纯粹的)虚拟析构函数。 也可以实现纯虚函数,但这很少见:
struct D {
    virtual void f() = 0;
};
该函数必须在类之外定义:
void D :: f() {}
但是该类仍然是抽象的。     
我不会说我是C ++方面的专家,但我会说您已将它钉牢。纯虚方法的存在意味着该类无法实例化,因此是抽象的。如果所有方法都是纯虚拟方法(即没有实现),则它将是一个接口,在这种情况下,您只需要头文件。     

要回复问题请先登录注册