Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 Какой из методов использовать? - ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн - Studbook
Главная->Інформатика та програмування->Содержание->Какой из методов использовать?

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн

Какой из методов использовать?

В классе Stack2 содержатся два метода: push() и pop(). Эти методы имеют те же имена, аргументы и возвращаемые значения, что и методы класса Stack. Если мы вызываем эти методы из функции main() оператором типа:

S1.push ( 11 );

то как же компилятор поймет, какой из двух методов push() вызвать? Существу- ет правило: если один и тот же метод существует и в базовом, и в производном классе, то будет выполнен метод производного класса. (Это верно для объектов производного класса. Объектам базового класса ничего не известно о производ- ном классе, поэтому они всегда пользуются методами базового класса.) В этом случае мы говорим, что метод производного класса перегружает метод базового класса. Для нашего примера, так как s1 — это объект класса Stack2, то будет вы- полнен метод push() класса Stack2, а не класса Stack.

Метод push() класса Stack2 проверяет, полон ли стек: если да, то он посылает сообщение об ошибке и завершает программу; если нет, то вызывается метод push() класса Stack. Таким же образом метод pop() класса Stack2 осуществляет проверку того, пуст ли стек. Если да, то выводится сообщение об ошибке и про- грамма завершается, если нет, то вызывается метод pop() класса Stack.

В функции main() мы помещаем в стек три числа, а извлечь пытаемся четы- ре. Поэтому последний вызов метода pop() приводит к ошибке

33 22 11

Ошибка: стек пуст и программа завершается.

 

14