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

1 ... 26 27 28 [ 29 ] 30 31 32 ... 227


if(!p) {

cout Ошибка выделения памяти\п ; exit(l);

*P = i;

) .... ; -tii/s:

ащает отрицательное значение *ob.p . . > .

int negfdyna ob} =. -

{ .

return

int mainO *

dyna о (-10);

cout o.getO \n ; cout neg(o) \n ;

dyna 32(20) ;

couW< o2.get() Лп ; cout neg{o2) \n ;

cou o.get() \n ; cout neg(o) \n ;

return 0;

3.3. Объекты в качестве возвращаемого значения функций

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

int get () { returp; } > .i ф t. л г.:

dyna : : dyna( inti ) ....:..> ... i . и i.

p= (int *) malloc (sizeof (int) ) ;



Приме;

1. Пример функции с объектом в качестве возвращаемого значения:

Возвращение объекта из функции tinclude <i03treain> tinclude <cstring>

using namespace Stuf , - /

class samp {

char s[80] ; public:

voi w() { cou \n ; } void set(char *str) { strcpy(s, str); }

Возвращает объект типа samp samp

char s[eO] ; . \ .

samp str;

cou Введите строку: ;

cin s;

str.set (s);

return str;

samp

присваивание возвращаемого значения объекту ob ob = inpu;: (} ;

ob. show () ;

return 0; .i:. . . . r

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



В этом примере функция input() создает локальный объект str и считывает строку с клавиатуры. Эта строка копируется в str.s, и затем функция возвращает объект str- Внутри функции main() при вызове функции input{) возвращаемый объект присваивается объекту оЪ.

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

предыдущей программы:

г-

При возвращении объекта генерируется ошибка #include <iostream> #include <cstring>

linclude <cstdlib> * .- .

using namespace std; . . . .

class samp {

char *s;

public: ,

sampO { \0; } -sampO { if(s) free(s);

cout Освобождение памяти по адресу з\п ;} void ShowO { cout s \n ; } . .

void set (char *str) ;

Загружает строку

voi set (char *str)

s = (char *} malloc (strlen(str)+1) ;

if(s) {

cou <-, Обка выделения памятиХп ; exit(l);

1 1.. .,L

Strcpy (s, str] ; , .:

} . . .

;.!,;f

Возвращает объект типа samp samp input {) (

char s[80] ; sap str;

cou-.< Введите строку:



1 ... 26 27 28 [ 29 ] 30 31 32 ... 227

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