Предположим, у меня есть два класса, абстрактные классы.Ограниченный конструктор в иерархии классов, 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);
};
Это означает, что B1
объект может быть реализован с использованием только A1
, в то время как B2
обязательно нужно право на B1
объект? Нет никакого шанса, что я мог бы смешивать вещи, используя A2 для экземпляра B1, например. Это связано с тем, что классы A,B
являются абстрактными. А если A,B
не являются абстрактными? это что-то меняет?
'B2' нужен указатель на' A2'. – Bathsheba
Вы можете сделать свой ctor с помощью параметра 'A *' в качестве параметра, тогда вы можете использовать 'A1' или' A2' для их создания. – songyuanyao
Что именно заставляет вас подозревать, что B1 может быть создан с помощью A2? Почему с A2, а не с Foo, Bar, int (int) или std :: string? –