我需要设置一个类继承结构,其中抽象基类只保存成员变量(但没有成员方法).成员方法将由派生类定义.因此,我需要的是这篇文章:在没有任何纯虚方法的情况下创建一个类抽象
从那里的前两个答案,我意识到有两种方法可以实现它:
我很想知道这两种方法之间的区别.是否存在一个应该优先于另一个的情况(或者某些特殊情况,其中一个可以工作而不是另一个)?我想到了,无法想到任何事情.
我在这里搜索了一些帖子的答案(是否有用于使受保护的析构函数虚拟?,C++:受保护的类构造函数,抽象类'析构函数应该是纯虚拟的吗?)尝试将某些东西放在一起,但我不能得出结论.
在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 …
我有一个抽象的基类,它的目的是允许创建一个指向基类的指针数组.(对'很多东西'有用......)
我的抽象基类不包含任何成员函数.因此没有纯虚方法,因此我猜它在技术上并不是抽象的.
但是,我不希望能够创建此类的实例.
是否可以创建无成员抽象基类?如果没有,是否有另一种解决方案来阻止我的"抽象基础"的实例被创建?是否会使构造函数protected足够?
有人向我指出,实际上,如果该类的目的是允许创建指向基类的指针的向量或数组,则不需要抽象基类 - 可能根本就没有基类和使用继承层次结构顶部的类作为基类.或者,可以复制并粘贴该顶级类并交换实现的纯虚函数方法而不实现,但是这在逻辑上与抽象基指针的想法不一致,并且会导致更难以维护代码.