我有一个问题,我还没有测试/编译,并想知道它是否可能,以及它是否是糟糕的设计?
我的问题:
我希望有一个抽象基类A和一个抽象派生类B.
我意识到如果这是可能的,我将在每个类中拥有许多纯虚拟成员函数,而且我将无法初始化这些对象,但这是抽象类的给定。
在我的设计中,我将有另一个派生类C,然后我会初始化 - C类将从B类派生。
我会看到像这样的东西
class C
^
|
abstract class B
^
|
abstract base class A
我的问题:
这首先是可能的吗?我怀疑是这样,但是没有在B类中声明A中的纯虚函数可能会很麻烦?
e.x。
class A {
public:
virtual void test()=0;
};
class B: public A {
public:
virtual void test()=0;
virtual void anotherTest()=0;
};
上面还可以吗?
这是不好的c ++设计?将来我会从A派生类,所以有这个设计会很好。
答案 0 :(得分:2)
它没有任何问题,它肯定会奏效。示例如下
stefanos-imac:dftb borini$ more test.cpp
#include <iostream>
class A {
public:
A(void) { std::cout << "A" << std::endl; }
virtual void method1() = 0;
};
class B : public A {
public:
B(void) : A() { std::cout << "B" << std::endl; }
virtual void method2() = 0;
};
class C : public B {
public:
C(void) : B() { std::cout << "C" << std::endl; }
virtual void method1() { std::cout << "method1" << std::endl; }
virtual void method2() {std::cout << "method2" << std::endl; }
};
int main() {
C c;
c.method1();
c.method2();
}
stefanos-imac:dftb borini$ ./a.out
A
B
C
method1
method2
感谢您提醒我,我仍然可以输入基本的C ++。