С++ для начинающих



         

Типы классов - часть 3


Если же написать:

String str4(1024);

то это вызовет ошибку компиляции, потому что нет ни одного конструктора с параметром типа int.

Объявление перегруженного оператора имеет следующий формат:

return_type operator op (parameter_list);

где operator – ключевое слово, а op – один из предопределенных операторов: +, =, ==, [] и так далее. (Точное определение синтаксиса см. в главе 15.) Вот объявление перегруженного оператора взятия индекса:

char& operator[] (int);

Этот оператор имеет единственный параметр типа int и возвращает ссылку на char. Перегруженный оператор сам может быть перегружен, если списки параметров отдельных конкретизаций различаются. Для нашего класса String мы создадим по два различных оператора присваивания и проверки на равенство.

Для вызова функции-члена применяются операторы доступа к членам – точка (.) или стрелка (->). Пусть мы имеем объявления объектов типа String:

String object("Danny");

String *ptr = new String ("Anna");

String array[2];

Вот как выглядит вызов функции size() для этих объектов:

vector<int> sizes( 3 );

// доступ к члену для objects (.);

// objects имеет размер 5

sizes[ 0 ] = object.size();

// доступ к члену для pointers (->)

// ptr имеет размер 4

sizes[ 1 ] = ptr->size();

// доступ к члену (.)

// array[0] имеет размер 0

sizes[ 2 ] = array[0].size();

Она возвращает соответственно 5, 4 и 0.

Перегруженные операторы применяются к объекту так же, как обычные:

String namel( "Yadie" );

String name2( "Yodie" );

// bool operator==(const String&)

if ( namel == name2 )

    return;

else

// String& operator=( const String& )

    namel = name2;

Объявление функции-члена должно находиться внутри определения класса, а определение функции может стоять как внутри определения класса, так и вне его. (Обе функции size() и c_str() определяются внутри класса.) Если функция определяется вне класса, то мы должны указать, кроме всего прочего, к какому классу она принадлежит. В этом случае определение функции помещается в исходный файл, допустим, String.C, а определение самого класса – в заголовочный файл (String.h в нашем примере), который должен включаться в исходный:




Содержание  Назад  Вперед