Составители:
Рубрика:
53
При этом обратное преобразование недопустимо синтаксисом языка. Когда
указателю на базовый класс присвоен адрес объекта производного класса, через
этот указатель можно обращаться только к той части производного класса,
которая унаследована от базового. Ошибку содержит следующий фрагмент:
main()
{A *pta;
C c;
pta=&c;
// pta->funcС(); Ошибка !!! Указатель pta адресует только ту часть объекта с, которая
//унаследована от класса А
((С*)pta)->funcC(); //правильный вызов
}
Указанное свойство указателей на базовый класс очень удобно, например,
при организации массивов разнотипных, но родственных объектов (объектов,
имеющих общего предка). Для того чтобы объединить подобные объекты в один
массив, необходимо объявить тип элементов массива как указатели на базовый
класс. Так, объявив массив
A *mas[100];
можно заносить в него адреса объектов классов A, В, С. Более подробно
организация подобных массивов будет рассматриваться в главе 4.5.
При наследовании классов компоненты базового класса становятся
доступны из производного. При этом компонентам базового класса в
производном присваивается некоторая область видимости, которая может и не
совпадать с областью видимости, заданной для него
при определении базового
класса. Это иллюстрирует следующий пример.
//Листинг 23. Изменение области видимости компонент при наследовании
class A
{ …
public:
int x;
…
};
class B: A
{…
};
main()
При этом обратное преобразование недопустимо синтаксисом языка. Когда
указателю на базовый класс присвоен адрес объекта производного класса, через
этот указатель можно обращаться только к той части производного класса,
которая унаследована от базового. Ошибку содержит следующий фрагмент:
main()
{A *pta;
C c;
pta=&c;
// pta->funcС(); Ошибка !!! Указатель pta адресует только ту часть объекта с, которая
//унаследована от класса А
((С*)pta)->funcC(); //правильный вызов
}
Указанное свойство указателей на базовый класс очень удобно, например,
при организации массивов разнотипных, но родственных объектов (объектов,
имеющих общего предка). Для того чтобы объединить подобные объекты в один
массив, необходимо объявить тип элементов массива как указатели на базовый
класс. Так, объявив массив
A *mas[100];
можно заносить в него адреса объектов классов A, В, С. Более подробно
организация подобных массивов будет рассматриваться в главе 4.5.
При наследовании классов компоненты базового класса становятся
доступны из производного. При этом компонентам базового класса в
производном присваивается некоторая область видимости, которая может и не
совпадать с областью видимости, заданной для него при определении базового
класса. Это иллюстрирует следующий пример.
//Листинг 23. Изменение области видимости компонент при наследовании
class A
{…
public:
int x;
…
};
class B: A
{…
};
main()
53
Страницы
- « первая
- ‹ предыдущая
- …
- 51
- 52
- 53
- 54
- 55
- …
- следующая ›
- последняя »
