Классы в С++
"Конструкторы. "
Когда мы получаем объект, например, длину или деньги, атрибуты класса могут быть любыми числами.
Чтобы знать точно, какие значения у атрибутов, можно создать свой конструктор:
// Начало мантры #include <iostream> #include <cstdlib> using namespace std; // Конец мантры // Класс для мер веса в Мьянме class MWeight{ // Закрытая область int kyattha; // тикал 1.63 г. int peittha; //viss 1.63 кг. public: // Открытая область // конструктор - обычная функция. Но она не возвращает НИКАКИХ значений // и назвается ТАКЖЕ как и КЛАСС MWeight();// конструктор для "пустого мешка", все атрибуты 0 // печать void print(); }; // конструктор "по-умолчанию" - пустой мешок MWeight::MWeight(){ kyattha=0; peittha=0; }; // печать void MWeight::print(){ cout<<peittha<<" peittha "<<kyattha<<" kyattha "<<endl; }; int main(){ MWeight a; // получится пустой мешок a.print(); };
"Конструкторы c разными параметрами"
В этом классе никак нельзя изменить значения kyattha и peittha. Можно создать функцию getWeight(int k, int p) для заполнения веса.
А еще можно создать еще один конструктор (функцию с именем класса). Но в этом новом конструкторе уже будут параметры.
Такой конструктор называется инициализирующий.
// Начало мантры #include <iostream> #include <cstdlib> using namespace std; // Конец мантры class MWeight{ int kyattha; // тикал 1.63 г. int peittha; // viss 1.63 кг. public: // Разные конструкторы MWeight(); // пустой мешок MWeight(int); // мешок с peittha MWeight(int p, int k);// "точный" мешок с peittha и kyattha // Сложение мешка с мешком MWeight add(MWeight m1); // печать void print(); }; // конструктор "по-умолчанию" - пустой мешок MWeight::MWeight(){ kyattha=0; peittha=0; }; //"инициализирующий конструктор" - положили peittha MWeight::MWeight(int p){ kyattha=0; peittha=p; }; //"инициализирующий конструктор" - положили kyattha // и peittha MWeight::MWeight(int p, int k){ kyattha=k; peittha=p; }; void MWeight::print(){ cout<<peittha<<" peittha<<"kyattha<<" kyattha "<<endl; }; // Сложение мешка с мешком MWeight add(MWeight m1){ // Здесь написать код }; int main(){ MWeight a; // пустой мешок MWeight b(40);// мешок, в котором только peittha MWeight c(15,20);// мешок с "точным" весом: peittha и kyattha a.print(); b.print(); c.print(); };
Задача 1.
Человек пришел за рисом с мешком m. Сначала мешок был пустой. Потом он купил peittha риса и положил в свой мешок. Потом он купил еще peittha и kyattha риса и тоже положил в свой мешок.
- Объявить и написать в классе MWeight функцию MWeight add(MWeight a) для сложения веса в мешках.
- Получить peittha риса для мешка m1 с клавиатуры, создать этот мешок конструктором и сложить с мешком m.
- Получить peittha и kyattha риса для мешка m2 с клавиатуры, создать этот мешок конструктором и сложить с мешком m.
- Напечатать вес мешка m.
Функции с одинаковым именем и разными параметрами.
Задача
У человека есть часы с 24-часовым циферблатом. Человек хочет:
- устанавливать на часах время (нужны конструкторы класса)
- изменять на часах время (функция getTime())
- переводить время вперед на hr часов или на hr часов и mn минут (функция forward())
- переводить время назад на hr часов или на hr часов и mn минут (функция back())
Написать класс Timec со всеми этими функциями
Пример функций класса:
// Начало мантры #include <iostream> #include <cstdlib> using namespace std; // Конец мантры class Timec{ // Эта ЗАКРЫТАЯ область int h; // часы int min; // минуты public: // Это ОТКРЫТАЯ область Timec(); // часы установлены в полночь (0,0) Timec(int); // установлены часы, минуты - 0 Timec(int, int); // установлены часы и минуты // функция получает время с клавиатуры void getTime(); // функция получает время как параметры void getTime(int hr, int m); Timec forward(int hr); // передвигаем на hr часов вперед Timec forward(Timec a); // передвигаем на вперед на часы и минуты Timec back(int hr); // передвигаем на hr часов назад Timec back(Timec a); // передвигаем на назад на часы и минуты // печать void print(); }; Timec::Timec(){ h=0; min=0; }; Timec::Timec(int hr){ h=hr; min = 0; }; Timec::Timec(int hr, int mn){ // Здесь написать код // чтобы функция получила время правильно h=hr; min=mn; }; // печать void Timec::print(){ cout<<h<<":"<<min<<endl; }; // Функция получения времени. // сразу получим время // она должна посчитать правильно void Timec::getTime(){ // Здесь написать код // чтобы функция получила время правильно cin>>h>>min; }; void Timec::getTime(int hr, int mn){ // Здесь написать код // чтобы функция получила время правильно h=hr; min=mn; }; // передвигаем часы вперед на hr часов Timec Timec::forward(int hr){ // Здесь написать код }; // передвигаем часы вперед на h часов и min минут Timec Time::forward(Timec a){ // Здесь написать код }; // передвигаем часы назад на hr часов Timec Timec::back(int hr){ // Здесь написать код }; // передвигаем часы назад на h часов и min минут Timec Time::back(Timec a){ // Здесь написать код }; int main(){ Timec t1; Timec t2(6); Timec t3; t1.print(); t2.print(); t1.getTime(); t1.print(); // И так можно. t3.getTime(12,20); t3.print(); // Дописать код, чтобы проверить остальные функции }
Задача 2
Дописать ВСЕ функции в этой задаче и проверить каждую.
Задача 3.
Человек измеряет вес в килограммах и граммах. Он пришел за арбузами на рынок в Мьянме. На рынке арбузы взвешивали в peittha и kyattha . Все арбузы весят одинаково. Мешок у человека может выдержать kg килограммов и g граммов.
Написать программу, которая вычисляет сколько арбузов поместится в мешок. Для этого сначала нужно написать и проверить все функции классов Metric и MWeight . Затем вычислить сколько арбузов будет в мешке (нужно использовать for)
// Начало мантры #include <iostream> #include <cstdlib> using namespace std; // Конец мантры class Metric; class MWeight; // Вес в килограммах и граммах class Metric{ int kg; // килограммы int gr; // граммы public: Metric(); // пустой мешок Metric(int); // мешок с килограммами Metric(int, int);// здесь килограммы и граммы void print();// печать // Добавляем в мешок вес в килограммах и граммах Metric add(Metric a); // Добавляем в мешок вес в kyattha и peittha Metric add(MWeight mn); // функция-датчик сравнивает вес нашего мешка и вес в кг и гр. // Если а больше, возвращает 0, иначе 1 int isFit(Metric a); //функция-датчик сравнивает сравнивает вес нашего мешка и вес в peittha и kyattha. //Если mn больше, возвращает 0, иначе 1 int isFit(MWeight mn); }; // Вес на рынке в Мьянме class MWeight{ int kyattha; // viss 1.63 кг. int peittha; // тикал 1.63 г. public: // Разные конструкторы class MWeight{ int kyattha; // тикал 1.63 г. int peittha; // viss 1.63 кг. public: // Разные конструкторы MWeight(); // пустой мешок MWeight(int); // мешок с peittha MWeight(int, int);// "точный" мешок с peittha и kyattha // Складываем два веса из Мьянмы MWeight add(MWeight a); // печать void print(); }; // Здесь написать все методы класса MWeight // Здесь написать все методы класса Metric int main(){ // здесь решить задачу };