Раздел «Язык Си».ClassMeshok1:

Классы в С++

"Конструкторы. "

Когда мы получаем объект, например, длину или деньги, атрибуты класса могут быть любыми числами.

Чтобы знать точно, какие значения у атрибутов, можно создать свой конструктор:

// Начало мантры
#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();

};

REFACTOR Задача 1.

Человек пришел за рисом с мешком m. Сначала мешок был пустой. Потом он купил peittha риса и положил в свой мешок. Потом он купил еще peittha и kyattha риса и тоже положил в свой мешок.

  1. Объявить и написать в классе MWeight функцию MWeight add(MWeight a) для сложения веса в мешках.
  2. Получить peittha риса для мешка m1 с клавиатуры, создать этот мешок конструктором и сложить с мешком m.
  3. Получить peittha и kyattha риса для мешка m2 с клавиатуры, создать этот мешок конструктором и сложить с мешком m.
  4. Напечатать вес мешка m.

Функции с одинаковым именем и разными параметрами.

Задача

У человека есть часы с 24-часовым циферблатом. Человек хочет:

  1. устанавливать на часах время (нужны конструкторы класса)
  2. изменять на часах время (функция getTime())
  3. переводить время вперед на hr часов или на hr часов и mn минут (функция forward())
  4. переводить время назад на 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();
// Дописать код, чтобы проверить остальные функции
 
}

REFACTOR Задача 2

Дописать ВСЕ функции в этой задаче и проверить каждую.

REFACTOR Задача 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(){
// здесь решить задачу


};

-- TatyanaOvsyannikova2011 - 02 Oct 2015