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




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


#inc1ude <iostream>

class String;

istream& operator>>( istream&, String& );

ostream& operator<<( ostream&, const String& );

class String {

public:

  // набор конструкторов

  // для автоматической инициализации

  // String strl;              // String()

  // String str2( "literal" ); // String( const char* );

  // String str3( str2 );      // String( const String& );

  String();

  String( const char* );

  String( const String& );

  // деструктор

  ~String();

  // операторы присваивания

  // strl = str2

  // str3 = "a string literal"

  String& operator=( const String& );

  String& operator=( const char* );

  // операторы проверки на равенство

  // strl == str2;

  // str3 == "a string literal";

  bool operator==( const String& );

  bool operator==( const char* );

  // перегрузка оператора доступа по индексу

  // strl[ 0 ] = str2[ 0 ];

  char& operator[]( int );

  // доступ к членам класса

  int   size() { return _size; }

  char* c_str() { return _string; }

private:

  int  _size;

  char *_string;

}

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

String();

является конструктором по умолчанию, потому что не требует явного указания начального значения. Когда мы пишем:

String str1;

для str1 вызывается такой конструктор.

Два оставшихся конструктора имеют по одному параметру. Так, для

String str2("строка символов");

вызывается конструктор

String(const char*);

а для

String str3(str2);

конструктор

String(const String&);

Тип вызываемого конструктора определяется типом фактического аргумента. Последний из конструкторов, String(const String&), называется копирующим, так как он инициализирует объект копией другого объекта.




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