![]() |
|
Программирование >> Расширенная версия языка c++
2.3. Введение в наследование Хотя более полно наследование (inheritance) обсуждается в главе 7, предварительно с ним необходимо познакомиться уже сейчас. Применительно к C++ наследование - это механизм, посредством которого один класс может наследовать свойства другого. Наследование позволяет строить иерархию классов, переходя от более общих к более специальным. Для начала необходимо определить два термина, обычно используемые при обсуждении наследования. Когда один класс наследуется другим, класс, который наследуется, называют базовым классом (base class). Наследующий класс называют производным классом (derived class). Обычно процесс наследования начинается с задания базового класса. Базовый класс определяет все те качества, которые будут общими для всех производных от него классов. В сущности, базовый класс представляет собой наиболее общее описание ряда характерных черт. Производный класс наследует эти общие черты и добавляет свойства, характерные только для него. Чтобы понять, как один класс может наследовать другой, давайте начнем с примера, который, несмотря на свою простоту, иллюстрирует несколько ключевых положений наследования. Для начала - объявление базового класса: Определение базового класса class В { . int i; public: voi i(int n) ; int get i (); Теперь объявим производный класс, наследующий этот базовый: Определение модного класса Class D: public В { int: : 2. Создайте класс которому при его создании передается системное время и дата в виде параметров конструктора. Этот класс должен включать в себя функцию-член, время и дату на экран. (Подсказка: Для нахождения и вывода на экран этих данных воспользуйтесь стандартной библиотечной функцией времени и даты.) 3. Создайте класс box, конструктору которого передаются три значения типа double, представляющие собой длины сторон параллелепипеда. Класс box должен подсчитывать его объем и хранить результат также в виде значения типа double. Включите в класс функцию-член vol(), которая будет выводить на экран объем любого объекта типа box. 58 Самоучитель. C++. public: void set 3 (intn) ; , , , . intraul 0; ,. }; Внимательно посмотрите на это объявление. Обратите внимание, что после имени класса D имеется двоеточие, за которым следует ключевое слово public и имя класса В. Для компилятора это указание на то, что класс D будет наследовать все компоненты класса В. Само ключевое слово public информирует компилятор о том, что, поскольку класс В будет наследоваться, значит, все открытые элементы базового класса будут также открытыми элементами производного класса. Однако все закрытые элементы базового класса останутся закрытыми и к ним не будет прямого доступа из производного класса. Ниже приводится законченная программа, в которой используются классы В и D: Простой пример наследования tinclude <iostream> using namespace std; * . г Определение базового класса class В { int i; public: void set i(int n); int get i() ; 1; ; Определение производного класса class D: public В { . . int j; , . . . -public: .. void intmul () ; i Задание значения i в базовом классе void B::set i(int n) { i = n ; Возвращение значения i в базовом классе int В: :get i() return i; int main ( ) D ob; загрузка i в базовый класс загрузка j в производный класс cou .mul () ; вывод числа 40 return 0; Обратите внимание на определение функции mul(). Отметьте, что функция get i(), которая является членом базового класса В, а не производного D, вызывается внутри класса D без всякой связи с каким бы то ни было объектом. Это возможно потому, что открытые члены класса В становятся открытыми членами класса D. В функции ти1() вместо прямого доступа к i, необходимо вызывать функцию get i(), поскольку закрытые члены базового класса (в данном случае i) остаются закрытыми для нее и недоступными из любого производного класса. Причина, по которой закрытые члены класса становятся недоступными для производных классов - поддержка инкапсуляции. Если бы закрытые члены класса становились открытыми просто посредством наследования этого класса, инкапсуляция была бы совершенно несостоятельна. Здесь показана основная форма наследования базового класса: class им одяого класса; с а.зового класса { t Здесь с д (спецификатор доступа) - это одно из следующих трех ключевых слов: public (открытый), private (закрытый) или protected (защищенный). Задание значения j в производном классе - . , . , void D: :set j (int п) . , . i :. j = n; Возвращение значения вого класса и j - производного int ..r:AL С/ -i ( . - .. . .- ,-: .. , ; ., :..Л; , производный класс может . вызывать функции-члены базового класса return j * get i();
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |