Ткм теория и практика формообразования заготовок


C++. Полиморфизм. Перегрузка операций и методов


Download 1.28 Mb.
bet64/65
Sana20.12.2022
Hajmi1.28 Mb.
#1034729
1   ...   57   58   59   60   61   62   63   64   65
Bog'liq
госник 150900 шпоры2

8. C++. Полиморфизм. Перегрузка операций и методов.
Полиморфизм реализуется с помощью наследования классов и виртуальных функций. Класс-потомок наследует сигнатуры методов класса-родителя, а реализация, в результате переопределения метода, этих методов может быть другой, соответствующей специфике класса-потомка. Другие функции могут работать с объектом как с экземпляром класса-родителя, но если при этом объект на самом деле является экземпляром класса-потомка, то во время исполнения будет вызван метод, переопределенный в классе-потомке. Это называется поздним связыванием. [Примером использования может служить обработка массива, содержащего экземпляры как класса-родителя, так и класса-потомка: очевидно, что такой массив может быть объявлен только как массив типа класса-родителя и у объектов массива могут вызываться только методы этого класса, но если в классе-потомке какие-то методы были переопределены, то в режиме исполнения для экземпляров этого класса будут вызваны именно они, а не методы класса-родителя.]
Класс-потомок сам может быть родителем. Это позволяет строить сложные схемы наследования — древовидные или сетевидные.
Абстрактные (или чисто виртуальные) методы не имеют реализации вообще (на самом деле некоторые языки, например C++, допускают реализацию абстрактных методов в родительском классе). Они специально предназначены для наследования. Их реализация должна быть определена в классах-потомках.
Класс может наследовать функциональность от нескольких классов. Это называется множественным наследованием. Множественное наследование создаёт известную проблему (в C++), когда класс наследуется от нескольких классов-посредников, которые в свою очередь наследуются от одного класса (так называемая «Проблема ромба»): если метод общего предка был переопределён в посредниках, неизвестно, какую реализацию метода должен наследовать общий потомок. Решается эта проблема через виртуальное наследование (C++).
9. C++. Наследование. Ограничения при наследовании.
class A{ //базовый класс
};
class B : public A{ //public наследование
};
class C : protected A{ //protected наследование
};
class Z : private A{ //private наследование
};
В C++ существует три типа наследования: 
Download 1.28 Mb.

Do'stlaringiz bilan baham:
1   ...   57   58   59   60   61   62   63   64   65




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling