Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

Открытый член класса доступен для пользователей; закрытый член класса доступен только членам класса.

class Date {

public:

  // ...

  int next_day();

private:

  int y, m, d;

};

void Date::next_day() { return d+1; } // OK

void f(Date d)

{

  int nd = d.d+1; // ошибка: Date::d — закрытый член класса

  // ...

}

Структура — это класс, члены которого по умолчанию являются открытыми.

struct S {

  // члены (открытые, если явно не объявлены закрытыми)

};

Более подробная информация о доступе к членам класса, включая обсуждение защищенных членов, приведена в разделе 14.3.4.

К членам объекта можно обращаться с помощью оператора . (точка), примененного к его имени, или оператора –> (стрелка), примененного к указателю на него.

struct Date {

 int d, m, y;

 int day() const { return d; } // определенный в классе

 int month() const;            // просто объявленный; определен

                               // в другом месте

 int year() const;             // просто объявленный; определен

                               // в другом месте

};

Date x;

x.d = 15;           // доступ через переменную

int y = x.day();    // вызов через переменную

Date* p = &x

p–>m = 7;           // доступ через указатель

int z = p–>month(); // вызов через указатель

На члены класса можно ссылаться с помощью оператора :: (разрешение области видимости).

int Date::year() const { return y; } // определение за пределами

                                     // класса

В функциях-членах класса можно ссылаться на другие члены класса, не указывая имя класса.

struct Date {

  int d, m, y;

  int day() const { return d; }

  // ...

};

Такие имена относятся к объекту, из которого вызвана функция:

void f(Date d1, Date d2)

{

  d1.day(); // обращается к члену d1.d

  d2.day(); // обращается к члену d2.d

  // ...

}

<p id="AutBody_Root614"><strong>A.12.1.1. Указатель this</strong></p>

Если хотите явно сослаться на объект, из которого вызвана функция-член, то можете использовать зарезервированный указатель this.

struct Date {

  int d, m, y;

  int month() const { return this–>m; }

  // ...

};

Функция-член, объявленная с помощью спецификатора const (константная функция-член), не может изменять значение члена объекта, из которого она вызвана.

struct Date {

  int d, m, y;

  int month() const { ++m; } // ошибка: month() — константная

                             // функция

 // ...

};

Более подробная информация о константных функциях-членах изложена в разделе 9.7.4.

<p id="AutBody_Root615"><strong>A.12.1.2. Друзья</strong></p>

Функция, не являющаяся членом класса, может получить доступ ко всем членам класса, если ее объявить с помощью ключевого слова friend. Рассмотрим пример.

// требует доступа к членам классов Matrix и Vector members:

Vector operator*(const Matrix&, const Vector&);

class Vector {

  friend

  Vector operator*(const Matrix&, const Vector&); // есть доступ

  // ...

};

class Matrix {

  friend

  Vector operator*(const Matrix&, const Vector&); // есть доступ

  // ...

};

Как показано выше, обычно это относится к функциям, которым нужен доступ к двум классам. Другое предназначение ключевого слова friend — обеспечивать функцию доступа, которую нельзя вызывать как функцию-член.

class Iter {

public:

  int distance_to(const iter& a) const;

  friend int difference(const Iter& a, const Iter& b);

  // ...

};

void f(Iter& p, Iter& q)

{

  int x = p.distance_to(q); // вызов функции-члена 

  int y = difference(p,q);  // вызов с помощью математического

                            // синтаксиса

  // ...

}

Отметим, что функцию, объявленную с помощью ключевого слова friend, нельзя объявлять виртуальной.

<p id="AutBody_Root616"><strong>A.12.2. Определения членов класса</strong></p>
Перейти на страницу:

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

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

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

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

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

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

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

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