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 に答える