#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 .