Создать объект, который наследуется от базового класса

Может быть, это вопрос начинающего, но мне нужна помощь по этому вопросу.

Предположим, что есть класс A, который наследует от класса B, который сам наследует от класса C.

Теперь, когда конструктор класса А выглядит так, все в порядке:

A::A(params)
:B(params)
{
}

Затем я попробовал это, но это не удалось:

A::A(params)
:C(params)
{
}

Почему я не могу игнорировать наследование от B здесь — или есть способ сделать это возможным? Определение A следующим образом не работает, здесь компилятор жалуется, что C уже является базовым классом A:

class A : B, C

0

Решение

Почему я не могу игнорировать здесь наследство от 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
0

Другие решения

Вы должны написать:

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) { ... }
};

Там действительно нет другого пути ….

0

По вопросам рекламы [email protected]