149
Приведем пример определения класса
человек (chelovek — жаль, но в
большинстве реализаций С++ использование кириллических символов не
допускается):
сlass chelovek
{
public:
int godRogd; //
год рождения
char Fam[50]; //
фамилия
char Ima[20]; //
имя
char Otc
[50]; //
отчество
// Вывод информации о человеке на экран
void pecat_kto_takoi()
{
cout << Fam << Ima << Otc << godRogd << "года рождения";
}
};
Разберем пример более подробно. У класса объявляется набор
общедоступных членов — об этом говорит
модификатор доступа
public
. Это переменные-члены класса, описывающие фамилию, имя и
отчество с помощью строк и год рождения — с использованием целого
числа, а также одна функция-член pecat_kto_takoi(), служащая для
вывода информации о человеке на экран (void в заголовке функции
означает, что она не возвращает никакого значения, return со значением
в таких функциях не используется).
В приведенном примере функция-член определена прямо в теле класса.
Это не подходит для длинных сложных функций — для них
предусматривается возможность задания при определении класса лишь ее
объявления и реализации в другом месте текста программы. При этом
определение функции должно предваряться именем класса, после которого
идет двойное двоеточие, как в примере:
// определение
функции-члена вне класса
class primer
{
int delai_nechto(); //
функция-член, лишь объявление — заголовок
float x; // переменная-член класса
};
…
// реализация
функции-члена класса primer
int primer:: delai_nechto()
150
{
…
}
После объявления класса мы получаем право создавать в программе на
С++ объекты данного класса, причем полностью равноправные с
объектами встроенных типов:
chelovek Liza, Andrei, Nasta; // три объекта класса человек
и обращаться к их членам, отделяя имя объекта и имя члена с помощью
точки:
Liza.pecat_kto_takoi();
Andrei.godRogd=1971;
Среди функций-членов класса имеются две особые разновидности —
конструктор и
деструктор. Функция-конструктор вызывается каждый
раз, когда нужно создать объект данного класса, а деструктор — при его
уничтожении. Имя конструктора в языке программирования С++
совпадает с именем класса, а имя деструктора образуется добавлением в
начало наименования класса символа ~.
Пример конструктора для класса
человек (обратите внимание на еще
одну особенность — у функции-конструктора не указывается тип
возвращаемого значения):
//
конструктор класса человек
chelovek::chelovek(char I[],char F[],char O[])
{
strcpy(Ima,I);
strcpy(Fam,F);
strcpy(Otc,O);
}
После задания данного конструктора допустимым становится создание
нового объекта класса
человек следующим образом:
chelovek Dima("Дмитрий","Геннадьевич","Романов",1971);
Класс может иметь несколько конструкторов, различающихся сигнатурой
(количеством и типом аргументов). Так, можно задать конструктор,
который будет инициализировать фамилию, имя и отчество пустыми
строками:
// другой конструктор для класса человек
chelovek::chelovek()
{
strcpy(Ima,"");
strcpy(Fam,"");
151
strcpy(Otc,"");
}
Наличие нескольких конструкторов — частный случай так называемой
перегрузки функций в объектно-ориентированных языках, тесно связанной
с полиморфизмом. Все задаваемые программистом конструкторы должны
быть объявлены при определении класса. В нашем случае это выглядит
так:
chelovek::chelovek(char I[],char F[],char O[],int G);
chelovek::chelovek();
Если программист при описании класса не создает ни одного конструктора
явным образом, система создает один, не имеющий аргументов и
называемый
конструктором по умолчанию.
Помимо создания объекта путем объявления переменной данного класса
возможно объявление переменной-указателя на объект данного класса. В
этом случае используется звездочка:
chelovek *Natasha;
Следует помнить, что при объявлении указателя объект на самом деле не
создается и впоследствии нужно выполнить специальное действие:
Natasha=new chelovek;
После этого можно обращаться к членам класса, используя не точку, а
стрелку ->:
Natasha->godRogd=2003;
Natasha->pecat_kto_takoi();
Достарыңызбен бөлісу: