Программирование на C и C++

Онлайн справочник программиста на C и C++

Взаимосвязь классов и структур

В языке С++ расширены возможности структуры, если сравнивать их с языком С. В С++ классы и структуры тесно взаимосвязаны. Фактически, за одним исключением, они взаимозаменяемы, по­скольку структура в С++ может включать как данные, так и код, который может манипулировать этими данными таким же образом, как и класс. Структуры также могут содержать конструкторы и деструкторы. Единственное отличие между ними связано с тем, что по умолчанию члены класса имеют в качестве спецификатора доступа private, тогда как спецификатором доступа членов струк­туры служит public. Согласно формальному синтаксису С++, ключевое слово struct определяет тип класса. В качестве примера рассмотрим программу:

#include <iostream.h>
struct cl {
int get_i(); // публичные
void put_i(int j); // по умолчанию
private:
int i;
};
int cl::get_i()
{
return i;
}
void cl::put_i(int j)
{
i = j;
}
int main()
{
cl s;
s.put_i(10);
cout << s.get_i();
return 0;
}

В этой простой программе определен тип структуры с именем cl, в которой функции get_i() и put_i() являются соответственно public и private. Обратим внимание, что структура использует ключевое слово private для введения частных членов структуры.

Ниже приведена эквивалентная программа, использующая класс вместо структуры.

#include <iostream.h>
class cl {
int i; // по умолчанию частный
public:
int get_i();
void put_i(int j);
};
int cl::get_i()
{
return i;
}
void cl::put_i(int j)
{
i = j;
}
int main()
{
cl s;
s.put i(10);
cout << s.get_i();
return 0;
}

В большинстве случаев программисты, работающие на языке С++, используют классы для опре­деления объектов, содержащих и данные и код. Они используют структуры для определения объек­тов, содержащих только данные. Это означает, что структуры используются обычно точно в том же стиле, что и структуры в языке С. Тем не менее время от времени встречается код на языке С++, который использует расширенные возможности структур.