Компилятор C++ Builder динамические библиотеки типизированные константы Условная операция Переменные в С Демонстрация работы Препроцессорная обработка Псевдопеременные Инспектор отладки Стек вызовов Операция присваивания Флаги управления

Неоднозначности при сложном наследовании

В иерархии классов со сложным наследованием вполне может получиться так, что класс косвенно унаследует несколько экземпляров некоторого базового класса. Если В и С оба являются наследниками A, a D наследует В и С, то D получает двойной набор элементов класса А. Это может приводить к неоднозначностям при обращении к ним, что будет вызывать ошибки времени компиляции. Вот иллюстрация:

class A { public:

int AData;

void AFunc ();

II... };

class B: public A

{

// ... };

class C: public A {

// ...

};

class D: public B, public С // Двукратно наследует А.

{

// ... ,

};

int main (void)

{

D d;

d.AData = 0; // Ошибка! d. AFunc ();

// Ошибка!

return 0;

}

В этом примере строки в main () , содержащие обращения к унаследованным от А элементам, будут вызывать ошибку компиляции с выдачей сообщения о том, что элемент класса неоднозначен. Однако эту неоднозначность несложно устранить, применив операцию разрешения области действия, например, так:

d.B::AData= 0;

d.С::AFunc();

Система содержит Библиотеку из более 100 повторно используемых визуальных компонент, которые перетаскиваются мышью на форму и сразу становятся элементами управления прототипа вашей программы. Помимо известных элементов управления Windows (кнопки, линейки прокрутки, поля редактирования, простые и комбинированные списки и т.д.) Библиотека содержит новые компоненты поддержки диалогов, обслуживания баз данных и многие другие

BIOS видеоадаптеровАдресное пространство памяти ПК Препроцессор и особенности компилятора Отладка программ