>Цели:
Изучение структуры класса, механизм создания и использования, описание членов-данных класса и методов доступа к ним.
1. Краткие теоретические сведения
Компоненты класса
Класс — это определяемый пользователем тип. Описание класса очень похоже на описание структуры в Си. В этом смысле класс является расширением понятия структуры. В простейшем случае класс можно определить с помощью конструкции:
тип_класса имя_класса {список_членов_класса};
, где
тип_класса – одно из служебных слов class, struct, union;
имя_класса – идентификатор;
список_членов_класса – определения и описания типизированных данных и принадлежащих классу функций.
Функции – это методы класса, определяющие операции над объектом.
Данные – это поля объекта, образующие его структуру. Значения полей определяет состояние объекта.
Рассмотрим реализацию понятия даты с использованием struct для того, чтобы определить представление даты и множества функций для работы с переменными этого типа:
struct date {
int month, day, year; // дата: месяц, день, год
void set(int, int, int);
void get(int*, int*, int*};
void next();
// …
};
Функции, описанные таким образом, называются функциями-членами и могут вызываться только для специальной переменной соответствующего типа с использованием стандартного синтаксиса для доступа к членам структуры.
Например:
date today; // сегодня
void f()
{
today.set(18,1,1985);
today.next();
}
Поскольку разные структуры могут иметь функции члены с одинаковыми именами, при определении функции члена необходимо указывать имя структуры:
void date::next()
{
if ( ++day > 28 ) {
// делает сложную часть работы
…
}
}
В функции-члене имена членов структуры могут использоваться без явной ссылки на объект. В этом случае имя относится к члену того объекта, для которого функция была вызвана.
Описание date в предыдущем подразделе дает множество функций для работы с date, но не указывает, что эти функции должны быть единственными для доступа к объектам типа date. Это ограничение можно наложить, используя вместо struct class:
class date { int month, day, year;
public:
void set(int, int, int);
void next();
};
Методы доступа к полям (геттеры и сеттеры)
class TPen
{ private:
string FColor;
public:
string getColor ();
void setColor ( string newColor );
};
Получить значение:
string TPen::getColor () { return FColor; }
Записать значение:
void TPen::setColor ( string newColor )
{ if ( newColor.length()!= 6 )
FColor = «000000»;
else
FColor = newColor;
}
Для описания объекта класса (экземпляра класса) используется конструкция
имя_класса имя_объекта;
Для изменения видимости компонент в определении класса можно использовать спецификаторы доступа: public, private, protected.
Общедоступные (public) компоненты класса доступны в любой части программы. Они могут использоваться любой функцией как внутри данного класса, так и вне его. Доступ извне осуществляется через имя объекта:
имя_объекта.имя_члена_класса
ссылка_на_объект.имя_члена_класса
указатель_на_объект->имя_члена_класса
Собственные (private) компоненты класса локализованы в классе и не доступны извне. Они могут использоваться функциями – членами данного класса и функциями – “друзьями” того класса, в котором они описаны.
Защищенные (protected) компоненты доступны внутри класса и в производных классах.
В том, что доступ к структуре данных ограничен явно описанным списком функций, есть несколько преимуществ. Любая ошибка, которая приводит к тому, что дата принимает недопустимое значение (например, Декабрь 36, 1985), должна быть вызвана кодом функции-члена, поэтому первая стадия отладки, локализация, выполняется еще до того, как программа будет запущена.
Защита закрытых данных связана с ограничением использования имен членов класса. В функции-члене на члены объекта, для которого она была вызвана, можно ссылаться непосредственно. Например:
class x {
int m;
public:
int readm() { return m; }
};
x aa;
x bb;
void f(){
int a = aa.readm();
int b = bb.readm();
// …
}
В первом вызове члена readm() m относится к aa.m, а во втором — к bb.m.
Указатель на объект, для которого вызвана функция-член, является скрытым параметром функции. В каждой функции класса x указатель this неявно описан как
x* this;
и инициализирован так, что он указывает на объект, для которого была вызвана функция член. this не может быть описан явно, так как это ключевое слово.
2. Задание
2.1 Общее задание (50%)
1. Создайте консольный проект. В теле функции main будет выполняться демонстрация работы объекта.
2. Добавьте в проект новый класс и назовите этот класс Worker. В класс добавьте два общедоступных поля: имя и возраст и одно скрытое поле: вес:
class Worker {
public:
int age;
char* name;
private:
float weight;
};
3. В теле функции main создайте объект класса Worker:
Worker *wrk1 = new Worker ();
wrk1->age = 34;
wrk1->name = “Иванов”;
Добавьте оператор(функцию) вывода на экран созданного объекта.
4. Запустите программу на выполнение.
5. Попробуйте записать значение в поле weight. Почему данные не записались?
6. Для записи и чтения данных из скрытых полей используют методы. Добавим во внутрь класса Worker новый метод (действие) который будет отвечать за еду, если человек чего-то там съест, то его вес должен будет увеличиться на количество съеденного.
в структуру класса:
public:
…
void eat (float how_much);
после описания класса, но до функции main:
void Worker::eat (float how_much){
weight = weight + how_much;
}
7. Если поле вес скрытое, то мы в него не только писать не можем, но и читать тоже не можем. Для чтения данных из скрытого поля необходимо использовать еще один метод:
в структуру класса:
public:
…
float get_weight();
после описания класса, но до функции main:
float Worker::get_weight(){
return weight;
}
8. Почему в последних двух функциях после слова public идут различные слова? Что они обозначают и на что влияют?
9. Теперь эти два метода надо использовать в нашей программе. Заставьте рабочего съесть 2, а затем 3 кг пищи. Проверьте его вес.
wrk1->eat(2);
wrk1->eat(3);
float ves;
ves = wrk1->get_weight();
Отобразите результат на экран.
10. Запустите программу на выполнение. Проверьте работоспособность. Добавьте комментарии.
11. Усовершенствуйте метод eat таким образом, что если рабочий за раз съедает более чем 10 кг, то его возраст увеличивается на год, а вес увеличивается только на половину от съеденного.
12. Попросите рабочего съесть 15 кг и посмотрите на результат работы программы.
13. Измените программу так, что бы имя рабочего и его первоначальный возраст вводились с клавиатуры и вносились в соответствующие переменные.
14. Запустите программу. Проверьте ее работоспособность.
15. Добавьте рабочему еще одно скрытое поле, которое будет отвечать за настроение и будет иметь первоначальное значение равное 10.
16. Добавьте три метода: гулять (метод должен увеличивать настроение на 1), танцевать (метод должен увеличивать настроение на 2) и работать (метод должен уменьшать настроение на 2).
17. Дополните основную программу так, что бы рабочий после еды два раза погулял и три раза потанцевал.
18. Добавьте в класс функцию, которая будет возвращать текущее настроение пользователя.
19. Добавьте в основную программу метод работать 9 раз (можно в цикле) и выведите настроение пользователя на экран.
20. Настроение получилось отрицательным? – ужасно. Измените метод работать таким образом, что бы настроение никогда не было меньше нуля (т.е. если настроение было 1 и человек поработал, то оно должно стать не меньше 0).
21. Проверьте заново работоспособность программы.
2.2 Индивидуальное задание (50%)
Реализовать пользовательский класс в соответствии с вариантом задания.
При реализации классов поля должны быть скрытыми.
Определить метод установки свойств (при недопустимых аргументах функции возвращать «false» и выдавать текст ошибки на экран).
Определить метод чтения свойств.
Написать демонстрационную программу, в которой показать использование объектов созданного класса.
Вариант 1
Класс Треугольник
Свойства: три стороны
Операции: ычисление площади;
Вариант 2.
Класс Треугольник
Свойства: три стороны
Операции:
угольника по величине углов (Остроугольный, Тупоугольный, Прямоугольный);
Вариант 3.
Класс Треугольник
Свойства: две стороны и угол между ними
Операции:
Равнобедренный, Равносторонний);
Вариант 4.
Класс Треугольник
Свойства: две стороны и угол между ними
Операции: е значений углов.
Вариант 5.
Класс Треугольник
Свойства: сторона и два прилежащих к ней угла
Операции: подобен ли другой треугольник данному (указанному по индексу массива);
Вариант 6.
Класс Треугольник
Свойства: сторона и два прилежащих к ней угла
Операции: нное количество процентов;
Вариант 7.
Класс Прямоугольный треугольник
Свойства: две стороны
Операции: нное количество процентов;
Вариант 8.
Класс Прямоугольный треугольник
Свойства: сторона и угол
Операции: з свойств) на заданный процент;
Вариант 9.
Класс Равнобедренный треугольник
Свойства: основание и боковая сторона
Операции: увеличение/уменьшение размера на определенный процент;
Вариант 10.
Класс Равнобедренный треугольник
Свойства: боковая сторона и угол при основании
Операции: е;
Вариант 11.
Класс Параллелограмм
Свойства: две стороны и угол между ними
Операции: процент; оналей;
Вариант 12.
Класс Параллелограмм
Свойства: две стороны и диагональ (прилегающая к ним так, что бы образовать треугольник)
Операции: ериметра и площади;
Вариант 13.
Класс Прямоугольник
Свойства: две стороны
Операции: ение диагонали.
Вариант 14.
Класс Квадрат
Свойства: Сторона
Операции:
Вариант 15.
Класс Ромб
Свойства: сторона и диагональ (меньшая)
Операции:
Вариант 16.
Класс Трапеция
Свойства: четыре стороны
Операции: риметра и площади;
Вариант 17.
Класс Окружность
Свойства: радиус
Операции:
ленный процент;
Вариант 18.
Класс Сегмент окружности
Свойства: хорда и высота сегмента
Операции: еделение длины дуги;
Вариант 19.
Класс Сектор окружности
Свойства: радиус и центральный угол
Операции:
Вариант 20.
Класс Круговое кольцо
Свойства: внешний и внутренний диаметр
Операции:
4. Контрольные вопросы
1. В определении класса члены класса с ключевым словом private доступны:
а) любой функции программы;
б) в случае, если известен пароль;
в) методам этого класса;
г) только открытым членам класса.
2. Напишите определение класса studentgroup, включающего одно закрытое поле типа int с именем number и одним открытым методом с прототипом voidadd( ).
3. Истинно ли следующее утверждение: поля класса должны быть закрытыми?
4. Для чего при работе с объектами применяется операция «точка»?
5. Для чего при работе с объектами применяется операция «стрелка»?
6. Методу класса всегда доступны данные:
а) объекта, членом которого он является;
б) класса, членом которого он является
в) любого объекта класса, членом которого он является;
7. Что является единственным формальным различием между структурами и классами в С++?
8. Пусть определены три объекта класса. Сколько копий полей класса содержится в памяти? Сколько копий методов класса?
9. Для чего необходимо переопределять операции new и delete?
10. Что такое указатель this?
Комментарии
Оставить комментарий
Валера 14 минут назад
добрый день. Необходимо закрыть долги за 2 и 3 курсы. Заранее спасибо.
Иван, помощь с обучением 12 минут назад
Валерий, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Fedor 2 часа назад
Здравствуйте, сколько будет стоить данная работа и как заказать?
Иван, помощь с обучением 2 часа назад
Fedor, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Алина 4 часа назад
Сделать презентацию и защитную речь к дипломной работе по теме: Источники права социального обеспечения
Иван, помощь с обучением 4 часа назад
Алина, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Алена 7 часов назад
Добрый день! Учусь в синергии, факультет экономики, нужно закрыт 2 семестр, общ получается 7 предметов! 1.Иностранный язык 2.Цифровая экономика 3.Управление проектами 4.Микроэкономика 5.Экономика и финансы организации 6.Статистика 7.Информационно-комуникационные технологии для профессиональной деятельности.
Иван, помощь с обучением 7 часов назад
Алена, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Игорь Петрович 10 часов назад
К утру необходимы материалы для защиты диплома - речь и презентация (слайды). Сам диплом готов, пришлю его Вам по запросу!
Иван, помощь с обучением 10 часов назад
Игорь Петрович, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Инкогнито 1 день назад
У меня есть скорректированный и согласованный руководителем, план ВКР. Напишите, пожалуйста, порядок оплаты и реквизиты.
Иван, помощь с обучением 1 день назад
Инкогнито, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Илья 1 день назад
Здравствуйте) нужен отчет по практике. Практику прохожу в доме-интернате для престарелых и инвалидов. Все четыре задания объединены одним отчетом о проведенных исследованиях. Каждое задание направлено на выполнение одной из его частей. Помогите!
Иван, помощь с обучением 1 день назад
Илья, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Alina 2 дня назад
Педагогическая практика, 4 семестр, Направление: ППО Во время прохождения практики Вы: получите представления об основных видах профессиональной психолого-педагогической деятельности; разовьёте навыки использования современных методов и технологий организации образовательной работы с детьми младшего школьного возраста; научитесь выстраивать взаимодействие со всеми участниками образовательного процесса.
Иван, помощь с обучением 2 дня назад
Alina, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Влад 3 дня назад
Здравствуйте. Только поступил! Операционная деятельность в логистике. Так же получается 10 - 11 класс заканчивать. То-есть 2 года 11 месяцев. Сколько будет стоить семестр закончить?
Иван, помощь с обучением 3 дня назад
Влад, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Полина 3 дня назад
Требуется выполнить 3 работы по предмету "Психология ФКиС" за 3 курс
Иван, помощь с обучением 3 дня назад
Полина, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Инкогнито 4 дня назад
Здравствуйте. Нужно написать диплом в короткие сроки. На тему Анализ финансового состояния предприятия. С материалами для защиты. Сколько будет стоить?
Иван, помощь с обучением 4 дня назад
Инкогнито, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Студент 4 дня назад
Нужно сделать отчёт по практике преддипломной, дальше по ней уже нудно будет сделать вкр. Все данные и все по производству имеется
Иван, помощь с обучением 4 дня назад
Студент, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Олег 5 дней назад
Преддипломная практика и ВКР. Проходила практика на заводе, который занимается производством электроизоляционных материалов и изделий из них. В должности менеджера отдела сбыта, а также занимался продвижением продукции в интернете. Также , эту работу надо связать с темой ВКР "РАЗРАБОТКА СТРАТЕГИИ ПРОЕКТА В СФЕРЕ ИТ".
Иван, помощь с обучением 5 дней назад
Олег, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Анна 5 дней назад
сколько стоит вступительные экзамены русский , математика, информатика и какие условия?
Иван, помощь с обучением 5 дней назад
Анна, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Владимир Иванович 5 дней назад
Хочу закрыть все долги до 1 числа также вкр + диплом. Факультет информационных технологий.
Иван, помощь с обучением 5 дней назад
Владимир Иванович, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Василий 6 дней назад
сколько будет стоить полностью закрыть сессию .туда входят Информационные технологий (Контрольная работа, 3 лабораторных работ, Экзаменационный тест ), Русский язык и культура речи (практические задания) , Начертательная геометрия ( 3 задачи и атестационный тест ), Тайм менеджмент ( 4 практических задания , итоговый тест)
Иван, помощь с обучением 6 дней назад
Василий, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф
Марк неделю назад
Нужно сделать 2 задания и 1 итоговый тест по Иностранный язык 2, 4 практических задания и 1 итоговый тест Исследования рынка, 4 практических задания и 1 итоговый тест Менеджмент, 1 практическое задание Проектная деятельность (практикум) 1, 3 практических задания Проектная деятельность (практикум) 2, 1 итоговый тест Проектная деятельность (практикум) 3, 1 практическое задание и 1 итоговый тест Проектная деятельность 1, 3 практических задания и 1 итоговый тест Проектная деятельность 2, 2 практических заданий и 1 итоговый тест Проектная деятельность 3, 2 практических задания Экономико-правовое сопровождение бизнеса какое время займет и стоимость?
Иван, помощь с обучением неделю назад
Марк, здравствуйте! Мы можем Вам помочь. Прошу Вас прислать всю необходимую информацию на почту и написать что необходимо выполнить. Я посмотрю описание к заданиям и напишу Вам стоимость и срок выполнения. Информацию нужно прислать на почту info@дцо.рф