Может быть, это вопрос начинающего, но мне нужна помощь по этому вопросу.
Предположим, что есть класс A, который наследует от класса B, который сам наследует от класса C.
Теперь, когда конструктор класса А выглядит так, все в порядке:
A::A(params)
:B(params)
{
}
Затем я попробовал это, но это не удалось:
A::A(params)
:C(params)
{
}
Почему я не могу игнорировать наследование от B здесь — или есть способ сделать это возможным? Определение A следующим образом не работает, здесь компилятор жалуется, что C уже является базовым классом A:
class A : B, C
Почему я не могу игнорировать здесь наследство от B — или есть способ сделать это возможным?
Потому что классы могут только решить, как построить их непосредственный субобъект. Прямой подобъект для A
является B
и для B
является C
, B
Объект тоже должен быть построен, вы не можете обойти его.
ошибка ты получил, в основном жалуется на это.
Определение A следующим образом не работает, здесь компилятор жалуется, что C уже является базовым классом A:
class A : B,C
С:
class A : B, C
вы на самом деле объявляете частный множественное наследование. И так как вы сказали B
уже имеет подобъект (наследуется от) C
Компилятор жалуется, что наследуется от C
в A
бесполезно.
Но, пожалуйста, не забывайте всегда указывать private
/protected
/public
вид наследования, чтобы избежать путаницы. По умолчанию наследование для class
эс private
и для struct
с это public
, Таким образом, приведенный выше код соответствует:
class A : private B, private C
Вы должны написать:
class C
{
public: C(ParamType param) { ... }
};
class B : public C
{
public: B(ParamType param) : C(param) { ... }
};
class A : public B
{
public: A(ParamType param) : B(param) { ... }
};
Там действительно нет другого пути ….