Рассмотрим следующий код C ++: < /p>
Код: Выделить всё
class A
{
public:
int i;
}
class B: virtual public A{};
class C: virtual public A{};
class D: public B, public C{};
int main()
{
D obj;
obj.i = 0;
return 0;
}
< /code>
Код является классическим примером виртуальной обработки алмаза. Я обеспокоен тем, почему мы использовали слово virtual
с классом B и c ? Ключевое слово не влияет на классы. Кроме того, когда я пишу класс B или c , я не думаю об использовании его позже в качестве базового класса некоторого производного класса, и даже я могу не знать, что классы B или c имеют братьев и сестер. Итак, я должен действительно добавить ключевое слово, которое последнее возвращает к ним, когда я буду реализовать класс D . Это кажется нелогичным для меня. Почему я должен беспокоить класс B или c , когда они не заботятся о разработке алмазной структуры. Для меня следующее логично: < /p>
Код: Выделить всё
class A
{
public:
int i;
}
class B: public A{};
class C: public A{};
class D: virtual public B, virtual public C{};
Здесь я добавил ключевое слово Virtual Когда я заметил, что там развивается структура алмаза.
Но C ++ не разработана таким образом. Кто -нибудь может сказать, каким был мотив или воображение такого дизайна?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... -no-effect