MWright
MWright

Reputation: 1711

Inheritance from two abstract classes

I have a problem that I have not yet tested/compiled and wondering if it is possible and if it is bad design?

My Problem:

I want to have an abstract base class A and a abstract derived class B.

I realize if this is possible I will have a number of pure virtual member functions in each class and also I will not be able to initialize these objects, but that is a given for abstract classes.

In my design I will have another derived class C which I would then initialize - class C would be derived from class B.

I would have something that looked like this

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

My Question:

Is this possible first of all? I would suspect so, but not declaring the pure virtual functions in A in class B may be troublesome?

e.x.

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

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

Is the above okay?

Is this bad c++ design? In future I will have derived classes from A so it would be nice to have this design.

Upvotes: 3

Views: 892

Answers (1)

Stefano Borini
Stefano Borini

Reputation: 143765

Nothing wrong with it, and it will certainly work. Example follows

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

Thank you for reminding me that I can still type basic C++.

Upvotes: 2

Related Questions