Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

Глава 2. Ориентированный на объект дизайн

//Студент (полученный от человека)

//основной предмет//год церемонии вручения дипломов

//информация о печати

пустота changeMajor (константа string& newMajor);//главное изменение

;

«Общественный Человек» фраза указывает, что Студент получен из За - класс сына. (Ключевое слово «общественность» определяет общественное наследование. Мы обсуждаем другие типы наследования позже.), Когда мы получаем классы таким образом, есть подразумеваемое, «» отношения между ними. В этом случае Студент «является» Человеком. В partic-ular, Студенческий объект наследует все членские данные и членские функции Человека класса в дополнение к обеспечению его собственных участников. Отношения между этими двумя классами показывают графически в диаграмме наследования класса в рисунке 2.4.

Человек

- имя: последовательность

- ssn: натяните +print (): пустота +getName (): последовательность

Студент

- главный: последовательность

- gradYear: интервал +print (): пустота

+changeMajor (в newMajor: последовательность): пустота

Рисунок 2.4: диаграмма наследования класса, показывая Человеку базового класса и Студенту производного класса. Записи, помеченные с «-», частные, и записи, помеченные с «+», общественные. Каждый блок диаграммы состоит из трех частей: название класса, членские переменные класса и членские функции класса. Тип (или тип возвращения) каждого участника обозначены после двоеточия (»: «). Стрелка указывает, что Студент получен от Человека.

2.2. Наследование и полиморфизм 73

Членские функции

Объект Человека типа может получить доступ к общественным членам Человека. Объект

Студент типа может получить доступ к общественным членам обоих классов. Если Студенческий объект призовет общую функцию печати, то он будет использовать свою собственную версию по умолчанию. Мы используем оператора объема класса (: :) чтобы определить, в котором функция класса используется, как За - сын:: печать и Студент:: печать. Обратите внимание на то, что объект Человека типа не может получить доступ к членам основного типа, и таким образом это не возможно для объекта Человека призвать changeMajor функцию Студента класса.

Человек человека («Мэри», «12-345»); //объявляют Человека

Студенческий студент («Боб», «98-764», «Математика», 2012);//объявляют Студента

суд <<student.getName () <<endl;

//

призывает Человека:: getName ()

person.print ();

//

призывает Человека:: печать ()

student.print ();

//

призывает Студента:: печать ()

person.changeMajor («Физика»);

//

ОШИБКА!

student.changeMajor («английский язык»);

//

хорошо

C ++ программисты часто считают полезным для производного класса явно призвать членскую функцию базового класса. Например, в процессе печати informa-tion для студента, естественно сначала напечатать информацию базового класса Человека, и затем напечатать информацию, особую студенту. Выполнение этой задачи сделано, используя оператора объема класса.

недействительный Человек:: печать ()

//определение печати Человека

единое время co <<«N m e» <<имя <<endl; единое время co <<«я был бы n u m» <<я dN гм <<endl;

недействительный Студент:: печать () //определение Студенческой печати

Человек:: печать (); //сначала печатают информацию о Человеке

суд <<«Главный» <<главный <<endl; суд <<«Год» <<gradYear <<endl;

Без «Человека::» спецификатор использовал выше, Студент:: функция печати назвала бы себя рекурсивно, который не является тем, что мы хотим.

Защищенные участники

Даже при том, что Студент класса - Человек унаследованный от класса, членские функции

У студента нет доступа к членам парламента, не занимающим официального поста Человека. Например, следующий - мычание незаконно.

недействительный Студент:: printName ()

единое время co <<имя <<'\n';

//ОШИБКА! имя частное Человеку

74