Составители:
Рубрика:
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
- …
- следующая ›
- последняя »