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




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


// содержимое исходного файла: String.С

// включение определения класса String

#inc1ude "String.h"

// включение определения функции strcmp()

#inc1ude <cstring>

bool               // тип возвращаемого значения

String::     // класс, которому принадлежит функция

operator==   // имя функции: оператор равенства

(const String &rhs)  // список параметров

{

    if ( _size != rhs._size )

        return false;

    return strcmp( _strinq, rhs._string ) ?

        false : true;

}

Напомним, что strcmp() – функция стандартной библиотеки С. Она сравнивает две строки встроенного типа, возвращая 0 в случае равенства строк и ненулевое значение в случае неравенства. Условный оператор (?:) проверяет значение, стоящее перед знаком вопроса. Если оно истинно, возвращается значение выражения, стоящего слева от двоеточия, в противном случае – стоящего справа. В нашем примере значение выражения равно false, если strcmp() вернула ненулевое значение, и true – если нулевое. (Условный оператор рассматривается в разделе 4.7.)

Операция сравнения довольно часто используется, реализующая ее функция получилась небольшой, поэтому полезно объявить эту функцию встроенной (inline). Компилятор подставляет текст функции вместо ее вызова, поэтому время на такой вызов не затрачивается. (Встроенные функции рассматриваются в разделе 7.6.) Функция-член, определенная внутри класса, является встроенной по умолчанию. Если же она определена вне класса, чтобы объявить ее встроенной, нужно употребить ключевое слово inline:

inline bool

String::operator==(const String &rhs)

{

    // то же самое

}

Определение встроенной функции должно находиться в заголовочном файле, содержащем определение класса. Переопределив оператор == как встроенный, мы должны переместить сам текст функции из файла String.C в файл String.h.

Ниже приводится реализация операции сравнения объекта String со строкой встроенного типа:

inline bool

String::operator==(const char *s)

{

    return strcmp( _string, s ) ? false : true;




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