Читаем C++ для начинающих полностью

Определение класса начинается ключевым словом class, за которым следует идентификатор – имя класса, или типа. В общем случае класс состоит из секций, предваряемых словами public (открытая) и private (закрытая). Открытая секция, как правило, содержит набор операций, поддерживаемых классом и называемых методами или функциями-членами класса. Эти функции-члены определяют открытый интерфейс класса, другими словами, набор действий, которые можно совершать с объектами данного класса. В закрытую секцию обычно включают данные-члены, обеспечивающие внутреннюю реализацию. В нашем случае к внутренним членам относятся _string – указатель на char, а также _size типа int. _size будет хранить информацию о длине строки, а _string – динамически выделенный массив символов. Вот как выглядит определение класса:

#include 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), называется копирующим, так как он инициализирует объект копией другого объекта.

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

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() для этих объектов:

vectorint sizes( 3 );

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

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

sizes[ 0 ] = object.size();

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

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных