相关疑难解决方法(0)

受保护的构造函数与纯虚拟析构函数

我需要设置一个类继承结构,其中抽象基类只保存成员变量(但没有成员方法).成员方法将由派生类定义.因此,我需要的是这篇文章:在没有任何纯虚方法的情况下创建一个类抽象

从那里的前两个答案,我意识到有两种方法可以实现它:

  • 使析构函数纯粹虚拟.
  • 使构造函数受到保护.

我很想知道这两种方法之间的区别.是否存在一个应该优先于另一个的情况(或者某些特殊情况,其中一个可以工作而不是另一个)?我想到了,无法想到任何事情.

我在这里搜索了一些帖子的答案(是否有用于使受保护的析构函数虚拟?,C++:受保护的类构造函数,抽象类'析构函数应该是纯虚拟的吗?)尝试将某些东西放在一起,但我不能得出结论.

c++ inheritance

6
推荐指数
1
解决办法
1184
查看次数

在C++中设计ABC(抽象基类)的好习惯

在java中,我们可以定义不同的接口,然后我们可以为具体的类实现多个接口.

// Simulate Java Interface in C++
/*
interface IOne {
    void   MethodOne(int i);
    .... more functions
}

interface ITwo {
    double MethodTwo();
    ... more functions
}

class ABC implements IOne, ITwo {
    // implement MethodOne and MethodTwo
}
*/
Run Code Online (Sandbox Code Playgroud)

在C++中,一般来说,我们应该避免使用多重继承,尽管多继承确实在某些情况下具有优势.

class ABC {
public:
    virtual void   MethodOne(int /*i*/) = 0 {}
    virtual double MethodTwo() = 0 {}

    virtual ~ABC() = 0 {}

protected:
    ABC() {} // ONLY ABC or subclass can access it
};
Run Code Online (Sandbox Code Playgroud)

问题1 >基于设计ABC,我应该改进其他任何东西,以使其成为一个体面的ABC?

问题2 …

c++ abstract-class design-patterns

3
推荐指数
2
解决办法
3124
查看次数

C++:如果类没有成员函数,如何创建抽象基类?

我有一个抽象的基类,它的目的是允许创建一个指向基类的指针数组.(对'很多东西'有用......)

我的抽象基类不包含任何成员函数.因此没有纯虚方法,因此我猜它在技术上并不是抽象的.

但是,我不希望能够创建此类的实例.

是否可以创建无成员抽象基类?如果没有,是否有另一种解决方案来阻止我的"抽象基础"的实例被创建?是否会使构造函数protected足够?

有人向我指出,实际上,如果该类的目的是允许创建指向基类的指针的向量或数组,则不需要抽象基类 - 可能根本就没有基类和使用继承层次结构顶部的类作为基类.或者,可以复制并粘贴该顶级类并交换实现的纯虚函数方法而不实现,但是这在逻辑上与抽象基指针的想法不一致,并且会导致更难以维护代码.

c++ abstract-base-class

1
推荐指数
1
解决办法
891
查看次数