Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class Time




Листинг 1.2. Определение методов

Определяем класс:

{

public:

void setTime(int h, int m, int s=0) //определение внутри класса

{

hours = h;

minutes = m;

seconds = s;

}

void setTime(const Time &t); // метод перегружен

void Display() const; // вывод на экран. Константный метод

Time nexthour(); // возврат определяемого типа

Time addhours(const Time &t); // параметр определяемого типа

void Read();

private:

int hours;

int minutes;

int seconds;

};

Определяем методы класса:

void Time::Display() const // определение вне класса

{ // константного метода

cout << hours << "." << minutes <<"."<<seconds;

}

void Time::Read()

{

cout <<"Hours: "; cin >> hours;

cout <<"Minutes: "; cin >> minutes;

seconds = 0;

}

void Time::setTime(const Time &t)

{

hours = t.hours;

minutes = t.minutes;

seconds = t.seconds;

}

Time Time::addhours(const Time &t)

{

Time r = *this;

r.hours += t.hours;

r.hours %= 24;

return r;

}

Time Time::nexthour()

{

hours ++;

hours %=24;

return *this;

}

Полезным является метод преобразования полей класса в строку toString() для последующего использования этой строки в других методах, например для вывода. Для работы со строками необходимо подключить стандартный заголовочный файл

#include <string>

Для показанного выше класса Time самая скромная реализация может выглядеть следующим образом:

string Time::toString()

{

string s = " ";

string Digits = "0123456789";

unsigned char d1, d2;

// формируем часы в строку

d1 = hours/10;

d2 = hours%10;

s = s + Digits[d1];

s = s + Digits[d2];

s += ".";

// формируем минуты в строку

d1 = minutes/10;

d2 = minutes%10;

s = s + Digits[d1];

s = s + Digits[d2];

s += ".";

// формируем секунды в строку

d1 = seconds/10;

d2 = seconds%10;

s = s + Digits[d1];

s = s + Digits[d2];

s += ".";

return s;

}

Метод возвращает текущее значение полей класса Time в виде строки – «чч.мм.сс».

Практические задания

Задание 1. Первое применение классов.

Убедитесь в том, что можно использовать класс точно так же, как структуру. Испытайте это в следующем консольном приложении:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

//---------------------------------

class CBox

{

public:

double m_length;

double m_width;

double m_height;

};

 

int main()

{

CBox box1; //

CBox box2; //

double boxValume = 0.0; //

 

box1.m_height = 18.0;

box1.m_length = 78.0;

box1.m_width = 24.0;

 

box2.m_height = box1.m_height - 10;

box2.m_length = box1.m_length/2;

box2.m_width = box1.m_length *0.25;

 

boxValume = box1.m_height*box1.m_length*box1.m_width;

cout << "Valume box1 = "<<boxValume<<endl;

cout << "box2 summa storon = "
<< box2.m_height+box2.m_length+box2.m_width
<< "cm"<<endl;

cout << sizeof box1<<" bayt"<<endl;

return 0;

}

 

Задание 2. Добавление функции-члена к классу CBox

Добавим к классу функцию, которая вычисляет объем объекта CBox.

 

#include "stdafx.h"

#include <iostream>

#include <conio.h>

 

using namespace std;

//---------------------------------

class CBox

{

public:

double m_length;

double m_width;

double m_height;

double Volume()

{

return m_length*m_width*m_height;

}

};

 

int main()

{

CBox box1; // Объявление box1 типа CBox

CBox box2; // Объявление box2 типа CBox

 

double boxVolume = 0.0; //

 

box1.m_height = 18.0;

box1.m_length = 78.0;

box1.m_width = 24.0;

 

box2.m_height = box1.m_height - 10;

box2.m_length = box1.m_length/2;

box2.m_width = box1.m_length *0.25;

 

boxVolume = box1.Volume();

cout<<"Volume box1 = "<<boxVolume<<endl;

cout<<"box2 summa storon = "<<box2.Volume<<" litr"<<endl;

cout<<sizeof box1<<" bayt"<<endl;

return 0;

}

Задание 3.Для самостоятельного выполнения

Для класса CBox реализовать следующие методы:

· Метод определения площади основания;

Задание 4. Закрытые члены класса

#include "stdafx.h"

#include <iostream>

#include <conio.h>

 

using namespace std;

//---------------------------------

class CBox

{

private:

double m_length;

double m_width;

double m_height;

public:

double Volume();

CBox(double lv, double wv, double hv);

CBox(double side);

CBox();

bool Compare(CBox & xBox);

double length() const{return m_length;}

};

//---реализация методов---------------

CBox::CBox(double lv, double wv, double hv)

{

m_length = lv;

m_width = wv;

m_height = hv;

}

CBox::CBox()

{

m_length = m_width = m_height = 1.0;

}

CBox::CBox(double side):m_length(side), m_width(side), m_height(side)

{

}

double CBox::Volume()

{

return m_length*m_width*m_height;

}

 

bool CBox::Compare(CBox &xBox)

{

return this->Volume() > xBox.Volume();

}

 

int main()

{

CBox box1(78.0, 23.0, 14.6);

CBox cigarBox(8.0, 12.5, 1.0);

CBox match(2.2, 5.0, 1.0); //

CBox box2;

double boxVolume; //

boxVolume = box1.Volume();

cout<<"Volume box1 = "<<boxVolume<<endl;

cout<<"Volume box2 "<<box2.Volume()<<" litr"<<endl;

cout<<"Volume cigarBox "<<cigarBox.Volume()<<endl;

CBox cub(5.0);

cout<<"Cub = "<< cub.Volume()<<endl;

 

if(cigarBox.Compare(match))

cout << "match < cigarBox" <<endl;

else

cout << " match >= cigarBox"<<endl;

cout<<"length box1 = "<<box1.length() <<"cm\n";

_getch();

 

return 0;

}

Задание 5. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int.

Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализированных объекта, присвойте результат третьему, а затем отобразите результат на экране.

Задание 6. Представьте пункт для взимания платежей за проезд по автостраде. Каждая проезжающая машина должна заплатить за проезд 50 центов, однако часть машин платит за проезд, а часть проезжает бесплатно. В кассе ведется учет числа проехавших машин и суммарная выручка от платы за проезд.

Создайте модель такой кассы с помощью класса tollBooth. Класс должен содержать два поля. Одно из них, типа unsigned int, предназначено для учета количества проехавших автомобилей, а второе, имеющее тип double, будет содержать суммарную выручку от оплаты проезда. Конструктор должен инициализировать оба поля нулевыми значениями. Метод payingCar() инкрементирует число машин и увеличивает на 0,50 суммарную выручку. Другой метод, nорауСаr(), увеличивает на единицу число автомобилей, но оставляет без изменения выручку. Метод display() выводит оба значения на экран. Там, где это возможно, сделайте методы константными.

Создайте программу, которая продемонстрирует работу класса. Программа должна предложить пользователю нажать одну клавишу для того, чтобы сымитировать заплатившего автолюбителя, и другую клавишу, чтобы сымитировать недобросовестного водителя. Нажатие клавиши Esc должно привести к выдаче текущих значений количества машин и выручки и завершению программы.




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 1235; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.056 сек.