Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 53 стр.

UptoLike

Составители: 

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