Почему ключевое слово «виртуальное» используется в классах, на которых он не имеет эффекта?C++

Программы на C++. Форум разработчиков
Anonymous
Почему ключевое слово «виртуальное» используется в классах, на которых он не имеет эффекта?

Сообщение Anonymous »

Рассмотрим следующий код 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

Вернуться в «C++»