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

1 ... 24 25 26 [ 27 ] 28 29 30 ... 227


должны быть уверены в том, что не удаляете нужную информацию, которая может понадобиться в дальнейшем.


1. Что неправильно в следующем фрагменте?

В этой программе есть ошибка #include <±ostreain> using namespace std;

clasH {

int i, j; public:

cll (in, int b) { i = a; j b; } ...

clas cl2 (

i, j;

public:

Cl2(int a, int b) { a; j = b; } ...

int main ( )

cll X(10, 20} ;

Cl2 у(0, 0); x ~ у;

...

2. Используя класс queue, который вы создали в главе 2, раздел 2.1, упражнение 1, покажите, как один объект, который мы назвали очередь, можно присвоить другому.

3. Если класс queue из предыдущего вопроса для хранения очереди требует динамического выделения памяти, то почему в такой ситуации одну очередь нельзя присвоить другой?

3.2. Передача объектов функциям

Объекты можно передавать функциям в качестве аргументов точно так же, как передаются данные других типов. Просто объявите параметр функции, как имеющий тип класса, и затем используйте объект этого класса в качест-



ве аргумента при вызове функции. Как и для данных других типов, по умолчанию объекты передаются в функции по значению.

Ириме

1. В этом коротком примере объект передается функции:

ttinclude <iostreain>

using namespace std;

class samp { . .

int i; public:

samp(int n) { i = n; }

int get i() { return i; ).

Возвращает квадрат o.i.

int sqr it(samp o)

return o.get i() * o.get i(};

int mainO

samp a (10) , b(2) ;

cout sqr it(a) \n ;

cout sqr it(b) \n ;

return 0;

В этой программе создается класс samp, который содержит одну целую переменную i. Функция sqr it() получает аргумент типа samp, а возвращаемым значением является квадрат переменной i этого объекта. Результат работы программы - это значения 100 и 4.

2. Как уже установлено методом передачи параметров включая объекты,

по умолчанию является передача объекта по значению. Это означает, что внутри функции создается копия аргумента и эта копия, а не сам объект, используется функцией. Поэтому изменение копии объекта внутри функции не влияет на сам объект. Это иллюстрируется следующим примером:

/* Запомните, объекты, как и другие параметры, передаются функции по значению и при этом в функции создается копия объекта. Так образом, изменение параметра внутри функции не влияет на объект, используемый в вызове. . .



В результате работы программы на экран выводится следующее: Для копии объекта а значение i равно: 100

но переменная а. i в функции п() милась: 10 ,. .. -

3. Как и в случае с переменными других типов, функции может быть передано не значение объекта, а его адрес. В этом случае функция может изменить значение аргумента, используемого в вызове. Например, в рассматриваемом ниже варианте программы из предыдущего примера значение объекта, чей адрес используется при вызове функции sqr it{), действительно меняется.

/* Теперь функции sq () передается адрес объекта и функция может изменить значение аргумента, адрес которого используется при вызове. V

ttinclude <iostream> -

using namespace std;

#include <iostream>

using namespace std;

class samp {

int i; public:

samp(int n) { i n; }

void set i(int n) { i = n; }

int get i () { return i; } . . .

/* Заменяет переменную о. i ее квадратом. Однако это не влияет на Объект, используемый для ьызоьа функции sqr it (i

void sqr it(samp о)

o.set i( o.get i{) * o.get i());

cou Для копии объекта а значение i равно: о.get i{); COUt. \n ;

samp a

sqr it(a); передача объекта а по значению

cou но переменная а. i в функции in() не изменилась: ;

cou ... ; .. , выводится 10

return 0;



1 ... 24 25 26 [ 27 ] 28 29 30 ... 227

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