Программирование >>  Расширенная версия языка c++ 

1 ... 29 30 31 [ 32 ] 33 34 35 ... 227


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; }



1 ... 29 30 31 [ 32 ] 33 34 35 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика