|
Программирование >> Расширенная версия языка c++
public: ... ; . car(int p, int s) { passengers = p; speed = s; } int sp greater{truck t) ; и ,: class truck { int weight; int speed; public: truck (int w, int s) ( weight speed = s; } №гьте новое использование оператора рений области видимости friend int car: : sp greater (truck t) ; /* Возвращает положительное ло, если легковая машина быстрее грузовика . Возвращает О при одинаковых скоростях . Возвращает отрицательное число, если грузовик быстрее легковой машины. int t) { - /* Поскольку функция sp greatGr{) - это член класса саг, ей должен передаваться только объект truck */ * . , return speed - t. speed; int t; car cl (6, 55) , c2 (2, 120) ; truck tl (10000, 55) , t2{20000, 72); cou Сравнение значение cl и tl:\n ; t ater (tl вызывается как функция-член класса car if(t<0) cou Грузовик быстрее. els ==0) cou Скорости машин одинаковы. \n ; else cou Легковая машина Ьыстрее . \n ; cou равнение с2 и t2:\n ; t = вызывается как функция-член класса car if(t<0) cout Грузовик быстрее. \п ; els U==0) cout Скорости машин одинаковы. \п ; else cou Легковая машина быстрее . \п ; return себе ситуацию, в которой показанные ниже два класса и используют общий принтер, а для оставшейся части программы необходимо знать, когда принтер занят объектом одного из этих классов. Создайте функцию inuseO, которая возвращает true, когда принтер занят объектом одного из классов и false - в противном случае. Сделайте эту функцию дружественной как классу prl, так и классу рг2. clas prl { . - - int printing; public: prl() { printing = 0; } voi rint (int status) { printing = status; } ... class pr2 { int printing; .j. ... Обратите внимание на новое использование оператора расширения области видимости, который имеется в объявлении дружественной функции внутри объявления класса truck. В данном случае он информирует компилятор о том, что функция sp greater() является членом класса саг. Существует простой способ запомнить, где в такой ситуации нужно указывать оператор расширения области видимости: сначала идет имя класса, потом - оператор расширения области видимости и последним - имя функции-члена. Таким образом член класса будет полностью задан. Фактически при упоминании в программе члена класса никогда не помешает полностью (с именем класса и оператором расширения области видимости) задать его имя. Однако при использовании объекта для вызова функции-члена или для доступа к переменной-члену, полное имя обычно излишне и употребляется редко. Например, инструкция t = с1.3p greater(tl); может быть написана с указанием (избыточным) оператора расширения области видимости и именем класса саг: Поскольку объект с1 является объектом типа саг, компилятор уже и так знает, что функция sp greater() - это член класса саг, что делает необязательным полное задание имени класса. 10 Самоучитель €++ public: - pr2 () { printing = 0; } - . l void set print (int status) { printing = status; } ... J - - Проверке усвоения i материала главы ............................ji Перед тем как продолжить, вам необходимо ответить на следующие вопросы и выполнить упражнения: 1. Какое условие является обязательным для присвоения одного объекта другому? 2. Пусть дан следующий фрагмент: . . .-у..: о . class samp { . .-. i.--iiV. : . double *p; public: . ;>; 1 d) { p = (double *) malloc(sizeof(double)); выделения памяти *p = d; ... : : - ; -Ji-i ... , , ,- . ..: . . sam 23.09) , ob2(0.0); . . t.rt...;ч -: < ... ..... ) , - -J ..L оЪ2 = obi; - Какую проблему вызовет присваивание объекта Л1 объекту оЬ2? 3. Дан следующий класс: class planet { int moons; double d.i.3t from sun; в милях .-. , double diameter; double mass; pub ... ... double get miles() { return om sun; }
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |