3

我有一个尚未测试/编译的问题,想知道它是否可能以及它是否是糟糕的设计?

我的问题:

我想要一个抽象基类 A 和一个抽象派生类 B。

我意识到如果这是可能的,我将在每个类中拥有许多纯虚成员函数,并且我将无法初始化这些对象,但这是抽象类的给定。

在我的设计中,我将有另一个派生类 C,然后我将对其进行初始化——类 C 将派生自类 B。

我会有一些看起来像这样的东西

class C
  ^
  |
abstract class B
  ^
  |
abstract base class A

我的问题:

首先这可能吗?我会怀疑,但不在 B 类中的 A 中声明纯虚函数可能会很麻烦?

前任

class A {
  public:
    virtual void test()=0;
 };

class B: public A {
  public:
   virtual void test()=0;
   virtual void anotherTest()=0;
 };

以上可以吗?

这是糟糕的 C++ 设计吗?将来我会从 A 派生类,所以有这个设计会很好。

4

1 回答 1

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++。

于 2012-05-09T18:40:41.290 回答