私は2つのクラス、抽象クラスを持っているとしましょう。クラス階層の制約付きコンストラクタ、C++
class A {
//code...
};
class B {
public:
B(A *x);
};
そして、次のように私は両方のクラスを拡張:
class A1 : public A {
};
class A2 : public A {
};
class B1 : public B {
public:
B1(A1 *x);
};
class B2 : public B {
B2(A2 *x);
};
これはB2
は必ずしもB1
オブジェクトの権利を必要とする一方で、唯一A1
使用B1
オブジェクトをインスタンス化することができることを意味?たとえば、B1をインスタンス化するためにA2を使用して、事を混在させることはできません。これは、クラスA,B
が抄録であるためです。 A,B
が抽象でない場合はどうですか?それは何か変わるのですか?
「B2」は、「A2」へのポインタを必要とします。 – Bathsheba
'A *'をパラメータとして使うことができます。次に 'A1'または' A2'を使ってそれらを構築することができます。 – songyuanyao
B1はA2でインスタンス化できますか?なぜA2で、Foo、Bar、int(int)、std :: stringではないのですか? –