Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 Вариант.doc
Скачиваний:
6
Добавлен:
17.09.2019
Размер:
355.33 Кб
Скачать

Федеральное агентство по образованию

Пермский государственный технический университет

Лабораторные работы на языке программирования СИ++

Выполнил студент:

Группы АСУзу-09-1

Дускаева Айгуль Халиловна

Проверила:

Викентьева Ольга Леонидовна

Пермь 2010

Содержание

Лабораторная работа №3

Лабораторная работа №6

Лабораторная работа №11

Лабораторная работа №13

Лабораторная работа №3

1. Постановка задачи.

  1. Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя нолями: типа long для рублей и типа inl для копеек. Дробная часть числа при выводе на экран должна быть отделена от целой части запятой.

  2. Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.

  3. Определить в классе деструктор.

  4. Определить в классе компоненты-функции для просмотра и установки полей данных (селекторы и модификаторы).

  5. Перегрузить операцию присваивания.

  6. Перегрузить операции ввода и вывода объектов с помощью потоков.

  7. Перегрузить операции вычитания секунд и сравнение временных интервалов.

  8. Написать программу, в которой продемонстрировать создание объектов и работу всех перегруженных функций.

2. Описание класса

class Money

{

long rub;

int kop;

public:

Money() {rub=0L;kop=0;} //конструктор без параметров

Money(int a) {rub=a; kop=0;} //конструктор с одним параметром типа int

Money(long a,int b) {rub=a; kop=b;} //конструктор с двумя параметром типа long и типа int

Money (Money& Money1) {rub=Money1.rub; kop=Money1.kop;} //конструктор с параметром типа Money

~Money() {} //деструктор

int getrub() {return rub;} //получение количества рублей

int getkop() {return kop;} //получение количества копеек

void setrub(long a) {rub=a;} //установка количества рублей

void setkop(int a) {kop=a;} //установка количества копеек

Money& operator = (Money& ); //перегрузка оператора присваивания

Money operator + (Money& Money1); //перегрузка оператора "+"

Money operator - (Money& Money1); //перегрузка оператора "-"

friend istream& operator>>(istream& in, Money& Money1); //дружественный внешний оператор ввода

friend ostream& operator<<(ostream& out, Money Money1); //дружественный внешний оператор вывода

};

3. Определение компонентных функций.

Money& Money::operator =(Money& Money1)

{

rub=Money1.rub;

kop=Money1.kop;

return *this;

}

Money Money::operator + (Money& Money1)

{

Money Money2;

Money2.rub=rub+Money1.rub+(kop+Money1.kop)/100;

Money2.kop=(kop+Money1.kop)%100;

return Money2;

}

Money Money::operator - (Money& Money1)

{

Money Money2;

Money2.rub=rub-Money1.rub+(100+kop-Money1.kop)/100+1;

Money2.kop=(100+kop-Money1.kop)%100;

return Money2;

}

4. Определение глобальных функций.

istream &operator >>(istream& in, Money& Money1)

{

cout<<"input rubli\n";

in>>Money1.rub;

cout<<"input kopejki\n";

in>>Money1.kop;

return in;

}

ostream &operator <<(ostream& out,Money Money1)

{

out<<Money1.rub<<","<<(Money1.kop)/10<<(Money1.kop)%10;

return out;

}

5. Функция main()

void main()

{

char ch;

long r;

int k;

Money a; //конструктор по умолчанию

Money b(1000L); //конструктор с одним параметром типа int

Money c(130L,10); //конструктор с двумя параметрами типа long и типа int

Money d(c); //конструктор с одним параметром типа Money

cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl; //вывод созданных переменных

cin>>a; //ввод переменной a

cin>>b; //ввод переменной b

cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl; //вывод результатов

r=a.getrub(); //получение количества минут из переменной a

k=a.getkop(); //получение количества секунд из переменной a

cout<<r<<" "<<k<<endl; //вывод результатов

b.setrub(120L); //установка количества рублей в переменную b

b.setkop(34); //установка количества копеек в переменную b

cout<<b<<endl;

a=c+d;

cout<<a<<endl;

a=a+d-b;

cout<<a;

cin>>ch;

}

6. Результаты работы программы

0,00

1000,00

130,10

130,10

input rubli

12

input kopejki

45

input rubli

2000

input kopejki

00

12,45

2000,00

130,10

130,10

12 45

120,34

260,20

271,96

7.

  1. Дружественные функции и классы используются для обращения функций – не членов класса к закрытым членам класса.

  2. Дружественная функция объявляется внутри класса. Перед описанием добавляется ключевое слово friend. Дружественная функция не является функцией-членом класса, в котором объявляется, однако имеет доступ к закрытым членам этого класса. Дружественная функция может быть членом другого класса.

  3. Префиксный унарный оператор можно перегрузить либо как функцию-член класса, не имеющую параметров, либо как глобальную дружественную функцию с одним параметром имеющим тип класса, для которого она перегружается. Постфиксный унарный оператор, в отличие от префиксного имеет дополнительный параметр типа int, который не нужен лишь для отличия в описании перегруженных операторов.

  4. Унарный оператор, определяемый внутри класса, не имеет операндов кроме случаев постфиксных операторов инкремента и декремента.

  5. Унарный оператор, определяемый вне класса должен иметь один операнд данного класса.

  6. Бинарный оператор, определяемый внутри класса, будет иметь один операнд.

  7. Бинарный оператор, определяемый вне класса, будет иметь два операнда.

  8. Операция присваивания возвращает ссылку на переменную, которой было присвоено значение.

  9. Операция присваивания перегружается как бинарная функция-член класса, получающая в качестве параметра переменную этого же класса и возвращающая ссылку на переменную, которой было присвоено значение.

  10. Операция присваивания возвращает ссылку на переменную, которой было присвоено значение.

  11. Операции ввода-вывода перегружаются созданием дружественных функций – членов классов, определяющих потоки ввода-вывода.

  12. Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student.

  13. Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 1 параметр – ссылку на тип Student, и возвращающую ссылку на тип Student.

  14. Компилятор будет воспринимать вызов оператора как вызов функции-члена класса Student, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool.

  15. Компилятор будет воспринимать вызов оператора как вызов дружественной для класса Student функции, имеющую 2 параметра – ссылки на тип Student, и возвращающую значение типа bool.