Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП на языке С++.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆
  1. Новый тип данных – класс

Целью введения концепции классов в С++ является предоставление программисту средств создания новых типов, которые настолько же удобны в использовании, как и встроенные типы. Тип является конкретным представлением некоторой концепции. Например, встроенный тип С++ float вместе с операциями +,-,* и т.д. является воплощением математической концепции вещественного числа. Класс– это определенный пользователем тип. Мы создаем новый тип для определения концепции, не выражаемой непосредственно встроенными типами. Например, мы могли бы ввести тип TrunkLine (междугородная линия) в программе, имеющей отношение к телефонии, тип Depositir (вкладчик) в программе управления банком или тип Pretator (хищник) в программе экологического моделирования.

Класс – фундаментальное понятие С++ и лежит в основе многих свойств С++. Класс предоставляет механизм для создания объектов. В классе отражены важнейшие концепции объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм.

С точки зрения синтаксиса класс в С++ – это структурированный тип, образованный на основе уже существующих типов.

В этом смысле класс является расширением понятия структуры. В простейшем случае класс можно определить с помощью конструкции:

тип_класса имя_класса{список_членов_класса};

где

тип_класса – одно из служебных слов class, struct, union;

имя_класса – идентификатор;

список_членов_класса – определения и описания типизированных данных и принадлежащих классу функций.

Функции – это методы класса, определяющие операции над объектом.

Данные – это поля объекта, образующие его структуру. Значения полей определяет состояние объекта.

Мы будем называть члены класса компонентами класса, различая компонентные данные и компонентные функции.

Пример 1.1.1

struct date //дата

{int month,day,year; // поля: месяц, день, год

void set(int,int,int); // метод – установить дату

void get(int*,int*,int*); // метод – получить дату

void next(); // метод – установить следующую дату

void print(); // метод – вывести дату

};

Пример 1.1.2.

struct complex // комплексное число

{double re,im;

double real(){return(re);}

double imag(){return(im);}

void set(double x,double y){re = x; im = y;}

void print(){cout<<”re = ”<<re; cout<<“im = ”<<im;}

};

Для описания объекта класса (экземпляра класса) используется конструкция

имя_класса имя_объекта

date today,my_birthday;

date *point = &today; //указатель на объект типа date

date clim[30]; // массив объектов

date &name = my_birthday; //ссылка на объект

В определяемые объекты входят данные, соответствующие членам­ – данным класса. Функции – члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Во-первых, с помощью «квалифицированных» имен:

имя_объекта.имя_класса : : имя_данного

имя_объекта.имя_класса : : имя_функции

Имя класса может быть опущено

имя_объекта.имя_данного

имя_объекта.имя_функции

Например:

класс “комплексное число”

complex x1,x2;

x1.re = 1.24;

x1.im = 2.3;

x2.set(5.1,1.7);

x1.print();

Второй способ доступа использует указатель на объект

указатель_на_объект–>имя_компонента

complex *point = &x1; // или point = new complex;

point –>re = 1.24;

point –>im = 2.3;

point –>print();

Пример 1.1.3.

Класс “товары”

int percent=12; // наценка

struct goods

{char name[40];

float price;

void Input()

{cout<<“наименование: ”;

cin>>name;

cout<<“цена: ”;

cin>>price;}

void print()

{cout<<“\n”<<name;

cout<<“, цена: ”;

cout<<long(price*(1.0+percent*0.01));}

};

void main(void)

{ goods wares[5];

int k = 5;

for(int i = 0; i < k; i++) wares[i].Input();

cout<<“\nСписок товаров при наценке ”<<percent<<“ % ”;

for(i = 0; i < k; i++) wares[i].print();

percent = 10;

cout<<“\nСписок товаров при наценке ”<< percent<<” % ”;

goods *pGoods = wares;

for(i = 0; i < k; i++) pGoods++–>print();

}