从两个抽象类继承

时间:2012-05-09 18:37:26

标签: c++

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

我的问题:

我希望有一个抽象基类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派生类,所以有这个设计会很好。

1 个答案:

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