Наследование в параметрах конструктора.
Базовые классы-это A, B, C, а их соответствующие дочерние классы-A1, B1, C1.
-> конструктор класса использует два параметра. (B и C)
Например, A (B *b, C *c).
-> конструктор класса A1 использует два параметра B1 и C1, и я также хочу вызвать конструктор одновременно с передачей аргумента B и C.
Я реализовал его следующим образом : A1 (B *b, C *c, B1 *b1, C1 *c1) : A(b,c).
- но проблема здесь в том, что я должен поддерживать две копии; например, базу b и дочернюю b1. Прежде чем звонить мне нужно подготовить обе Б и В1 по отдельности.
Есть ли лучший способ его реализовать?
Что я уже пробовал:
Пытался :
A (B *b , C *c).
Пытался :
A1 (B *b, C *c, B1 *b1, C1 *c1) : A(b,c).
Kornfeld Eliyahu Peter
Все эти А, В и с сбивают с толку...
Когда вы говорите, что конструктор A имеет два параметра типа B и C, Вы имеете в виду класс B и Класс C, упомянутые только что?
Итак, b и b1-это два разных объекта, один из которых относится к классу типа B, а другой-к классу типа B1?
CPallini
Извините, я вас не понимаю: если вам нужно передать четыре аргумента, то вы должны передать их все: я не вижу кратчайшего пути.
Kornfeld Eliyahu Peter
class B { public: B(); }; class B1 : public B { public: B1() : B() { }; }; class C { public: C(); }; class C1 : public C { public: C1() : C() { }; }; class A { public: A(B* b, C* c); }; class A1 : public A { public: A1(B* b, C* c, B1* b1, C1* c1) : A(b, c) { }; };
Hemal Shah
Привет Корнфельделияхупете,
Спасибо за ваш ответ.
На самом деле, я реализовал его так же, как и вы реализовали.
Проблема возникает теперь, когда всякий раз, когда я вызываю конструктор A1, в это время мне нужно передать и B, и B1 отдельно.
Перед вызовом конструктора мне нужно установить поля в B и B1 отдельно (или скопировать), а затем я могу их использовать.
Kornfeld Eliyahu Peter
Я не вижу никакого ярлыка для этого - вы разработали установку, где A1 имеет четыре параметра... Вы должны передать четыре параметра...
Hemal Shah
Есть ли какой-либо альтернативный способ, например использовать только B1 и C1 в конструкторе A1 и построить вызов конструктора внутри A1. ?
В таком случае, как пройти B и C ?
Kornfeld Eliyahu Peter
Это возможно, но может быть плохим дизайном (должен ли А1 знать, как создать а?)...
Hemal Shah
Да, A1 знает, что он должен использовать B и C во время вызова конструктора.
Но IDK, как передать B и C внутри A1, так как я только что использовал B1 и C1 в аргументе конструктора A1.
Kornfeld Eliyahu Peter
Ну и что?
class A1 : public A { public: A1(B1* b1, C1* c1) { // create b from b1 and c from c1 // call base constructor } };