Полный отказ от ответственности, это домашнее задание - не оценивается, просто дается студентам, чтобы мы могли практиковаться. Я прошу помощи, потому что мы не получим ответ, и я просто хочу знать, как его решить.
Что я могу сделать, это определить структуры B и C. Их интерфейс должен быть «как интерфейс А, с изменениями, чтобы он работал правильно». Я не могу добавить какие-либо новые методы. Я также не могу ничего изменить в структуре A.
Это код:
#include <iostream>
struct A;
struct B;
struct C;
struct A {
A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
int main(){
C c;
}
И желаемый вывод:
A::A()
A::A()
B::B()
A::A()
A::A()
B::B()
A::A()
C::C()
То, что я пытался сделайте так: сначала я начал так, просто чтобы проверить:
struct B : public A {
B() : A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
struct C : public B {
C() : B() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
Что дало мне:
A::A()
B::B()
C::C()
Итак, я попытался сначала получить C, затем A затем B, A (желаемый вывод снизу):
struct B : public virtual A {
B() : A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
struct C : public B, public A {
C() : A(), B() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
Но, конечно, это не сработало. (предупреждение: прямая база 'A' недоступна в 'C' из-за неоднозначности)
Добавление виртуального ключевого слова, как показано ниже, снова дало мне C, B, а затем A снизу:
struct B : public virtual A {
B() : A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
struct C : public virtual A, public B {
C() : A(), B() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
Если я хочу получить C, то ИИ должен сделать следующее (но тогда не будет Б)
struct C : public virtual A {
C() : A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
struct B : public virtual A, public C {
B() : C(), A() {
std::cout << __PRETTY_FUNCTION__ << "\n";
}
};
Я также понятия не имею, как я могу получить A :: A ( ) дважды подряд.
Я просто хочу понять, как это должно работать, но если вы все еще чувствуете, что не хотите помогать мне с решением, тогда, пожалуйста, оставьте мне несколько советов.