Аргументы класса внутри аргументов конструктора другого класса в C

#c #class #constructor

#c #класс #конструктор

Вопрос:

Может кто-нибудь, пожалуйста, помочь мне с этим? Это может показаться простым, но мне трудно.

 class Base { 
    int x;
    int y;

public:    
    Base(int a, int b) : x(a), y(b) {}

};

class Derived : public Base {
    Base a;
    Base b;
    Base c;
    std::string name;

public:
    Derived(Base a_, Base b_, Base c_, std::string name_): a(a_), b(b_), c(c_), name(name_) {}
};
  

Вот в чем проблема. Кажется, я не могу инициализировать это, я пробовал несколько способов и искал в Интернете, но не могу найти правильный ответ на этот вопрос.

 int main() {
    Derived var1({1,2}, {3,4}, {5,6}, "TEST");
}
  

Комментарии:

1. Вы не должны наследовать class2 от class1, если единственное, что вам нужно в class2, — это 3 члена class1.

Ответ №1:

class1 конструктор принимает два параметра:

 class1(int a, int b)
  

class2 наследуется от class1 , однако class2 конструктору не удается передать два требуемых параметра своему суперклассу.

Комментарии:

1. Итак, какое здесь решение? Потому что у меня есть упражнение, которое заставляет меня инициализировать это, и я не могу сделать закрытые члены общедоступными. Я просто не могу понять, как это объявить.

2. Либо передайте правильные аргументы суперклассу, либо не class2 наследуйте от class1 . Других вариантов нет. Вот как работает C .

3. Это может показаться глупым, но как в этом примере можно передать правильные аргументы своему суперклассу? Я занимаюсь этим уже несколько часов.

4. Я всегда получаю сообщение об ошибке, сообщающее мне, что у меня нет конструктора по умолчанию в class2 для class1.

5. Это правильно. При этом вы явно не создаете суперкласс, поскольку class1 у него нет конструктора по умолчанию, вы получаете эту ошибку. В вашей книге по C объясняется, как создавать суперклассы, гораздо более подробно, что, возможно, может быть объяснено несколькими сотнями символов в комментарии к stackoverflow.com . Я уверен, что вы сможете найти больше информации в своей книге по C .