In - C ++ Primer, третье издание Стэнли
Б. Липпман, Хосе Лахуа
В нем говорится:
15.1 Перегрузка оператора
Как мы видели в примерах в предыдущих главах, перегрузка операторов позволяет программисту определять версии предопределенных операторов (как обсуждалось в главе 4) для операндов типа класса. Например, класс String, представленный в разделе 3.15, определяет много перегруженных операторов. Вот определение нашего класса String:
#include <iostream>
class String;
istream& operator>>( istream &, String & );
ostream& operator<<( ostream &, const String & );
class String {
public:
/ overloaded set of constructors
// provide automatic initialization
String( const char * = 0 );
String( const String & );
// destructor: automatic deinitialization **------> NOTE**
String(); //**------> NOTE**
// overloaded set of assignment operators
String& operator=( const String & );
String& operator=( const char * );
// overloaded subscript operator
char& operator[]( int ) const;
// overloaded set of equality operators
// str1 == str2;
bool operator==( const char * ) const;
bool operator==( const String & ) const;
// member access functions
int size() { return _size; }
char* c_str() { return _string; }
private:
int _size;
char *_string;
};
Как может String()
быть деструктором? Разве деструктор не должен появляться с префиксом тильды, например ~String()
?
Думаю, я нашел ошибки в книге, рекомендованной SO