Помощь в написании студенческих работ
Антистрессовый сервис

Вариант №4. Класс, как настройка над стандартным типом

Курсовая Купить готовую Узнать стоимостьмоей работы

Все функции операции по определению перегружены. Функция операция задает новый смысл операции в дополнение к встроенному определению, и может существовать несколько функций операций с одним и тем же именем, если в типах их параметров имеются отличия, различимые для компилятора, чтобы он мог различать их при обращении. Применение определяемых операций преобразования — это типы, которые… Читать ещё >

Вариант №4. Класс, как настройка над стандартным типом (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • ОСНОВНАЯ ЧАСТ
  • 1. Понятие классов в С++
  • 2. Конструкторы
  • 3. Деструкторы
  • 4. Виртуальные функции
  • 5. Дружественные классы и функции
  • 6. Перегрузка операций
    • 1. 1. Функции Операции
      • 1. 1. 1. Бинарные и Унарные Операции
      • 1. 1. 2. Предопределенные значения операций
      • 1. 1. 3. Операции и определяемые пользователем типы
      • 1. 1. 4. Операции Преобразования
  • 7. Программный код
  • 8. Тестирование программы
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ЛИТЕРАТУРЫ

Операции и определяемые пользователем типы

Функция операция должна или быть членом, или получать в качестве параметра по меньшей мере один объект класса (функциям, которые переопределяют операции new и delete, это делать необязательно). Это правило гарантирует, что пользователь не может изменить смысл никакого выражения, не включающего в себя определенного пользователем типа. В частности, невозможно определить функцию, которая действует исключительно на указатели. Функция операция, первым параметром которой предполагается основной тип, не может быть функцией членом. Рассмотрим, например, сложение комплексной переменной aa с целым 2: aa+2, при подходящим образом описанной функции члене, может быть проинтерпретировано как aa. operator+(2), но с 2+aa это не может быть сделано, потому что нет такого класса int, для которого можно было бы определить + так, чтобы это означало 2. operator+(aa). Даже если бы такой тип был, то для того, чтобы обработать и 2+aa и aa+2, понадобилось бы две различных функции члена. Так как компилятор не знает смысла +, определенного пользователем, то не может предполагать, что он коммутативен, и интерпретировать 2+aa как aa+2. С этим примером могут легко справиться функции друзья.

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

Операции Преобразования

Применение определяемых операций преобразования — это типы, которые предоставляют нестандартные представления чисел (арифметика по основанию 100, арифметика с фиксированной точкой, двоично-десятичное представление и т. п.). При этом обычно переопределяются такие операции, как + и *.

Функции преобразования оказываются особенно полезными для работы со структурами данных, когда чтение (реализованное посредством операции преобразования) тривиально, в то время как присваивание и инициализация заметно более сложны.

Типы istream и ostream опираются на функцию преобразования, чтобы сделать возможными такие операторы, как while (cin>>x) cout<>x выше возвращает

istream&. Это значение неявно преобразуется к значению, которое указывает состояние cin, а уже это значение может проверяться оператором while

Программный код

#include

using namespace std;

class SuperInt{ //класс-надстройка над int

private:

long value;

public:

SuperInt (int intValue){ //конструктор

value = intValue;

}

SuperInt (){ //конструктор с дефолтным значением

value = 0;

}

long operator +(long addValue){ //перегрузка сложения

return value + addValue;

}

long operator -(long subValue){ //перегрузка вычитания

return value — subValue;

}

long operator *(long mulValue){ //перегрузка умножения

return value * mulValue;

}

class Zero{}; //класс для пробрасывания исключений деления на 0

long operator /(long divValue){ //деление нацело

try{

if (divValue ≠ 0)

return value / divValue;

else

throw Zero (); //пробросить исключение

}

catch (Zero &e){

cout << «ERROR: Division By Zero» << endl; //выдать ошибку

}

return 0;

}

long operator %(long divValue){ //остаток от деления

try{

if (divValue ≠ 0)

return value % divValue;

else

throw Zero ();

}

catch (Zero &e){

cout << «ERROR: Division By Zero» << endl;

}

return 0;

}

long operator ++(){ //перегрузка ++

return value++;

}

long operator —(){ //перегрузка -;

return value—;

}

friend std: istream& operator>>(std:istream& cin, SuperInt& superInt){ //потоковый ввод

cin>>superInt.value;

return cin;

}

operator long (){ //преобразование к long, для потокового вывода

return value;

}

};

void main (){

char c = 'y';

while (c == 'y'){

std:cout << «Enter A and Bn» ;

SuperInt a, b;

std:cin >> a >> b;

std:cout << «A = «<< a << endl;

std:cout << «B = «<< b << endl;

std:cout << «A + B = «<< a + b << endl;

std:cout << «A — B = «<< a — b << endl;

std:cout << «A * B = «<< a * b << endl;

std:cout << «A / B = «<< a / b << endl;

std:cout << «A % B = «<< a % b << endl;

SuperInt min, max;

if (a > b){

min = b;

max = a;

}

else{

min = a;

max = b;

}

std:cout << «MIN (A, B) = «<< min << endl;

std:cout << «MAX (A, B) = «<< max << endl;

a++;

std:cout << «A++ = «<< a << endl;

b—;

std:cout << «B— = «<< b << endl;

std:cout << «Again (y/n)?» ;

std:cin >> c;

};

}

Тестирование программы Проверка выход за диапазон типа

Рис.1

Проверка деление на ноль

Рис.2

Заключение

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

Список литературы

Орлов С. А. Технологии разработки программного обеспечения. Учебник для вузов. СПб.: Питер, 2002, 464с.

Страустрап Б. Язык программирования Си++. М.:Радио и связь, 1991, 350с.

В.В. Липаев. Тестирование программ. — М.: Радио и связь, 1986. — С. 15−47.

Трофимов С. П. Программирование в Си. / сост. С. П. Трофимов. Метод.

указания по курсовому проектированию. Екатеринбург: Изд-во УГТУ, 2007, 23с.

Трофимов С. П. Программирование в Си. Организация ввода-вывода: метод.

указания к лабораторной работе / сост. С. П. Трофимов. Екатеринбург: УГТУ, 1998. 14с.

Трофимов С. П. Программирование в Си. Динамическое распределение памяти / сост. С. П. Трофимов. Екатеринбург: УГТУ, 1998. 13с.

Орлов С. А. Технологии разработки программного обеспечения. Учебник для вузов. СПб.: Питер, 2002, 464с.

Страустрап Б. Язык программирования Си++. М.:Радио и связь, 1991, 350с.

В.В. Липаев. Тестирование программ. — М.: Радио и связь, 1986. — С. 15−47.

Страустрап Б. Язык программирования Си++. М.:Радио и связь, 1991, 350с.

В.В. Липаев. Тестирование программ. — М.: Радио и связь, 1986. — С. 15−47.

Орлов С. А. Технологии разработки программного обеспечения. Учебник для вузов. СПб.: Питер, 2002, 464с

Показать весь текст

Список литературы

  1. С.А. Технологии разработки программного обеспечения. Учебник для вузов. СПб.: Питер, 2002, 464с.
  2. . Язык программирования Си++. М.:Радио и связь, 1991, 350с.
  3. В.В. Липаев. Тестирование программ. — М.: Радио и связь, 1986. — С. 15−47.
  4. С.П. Программирование в Си. / сост. С. П. Трофимов. Метод. указания по курсовому проектированию. Екатеринбург: Изд-во УГТУ, 2007, 23с.
  5. С.П. Программирование в Си. Организация ввода-вывода: метод. указания к лабораторной работе / сост. С. П. Трофимов. Екатеринбург: УГТУ, 1998. 14с.
  6. С.П. Программирование в Си. Динамическое распределение памяти / сост. С. П. Трофимов. Екатеринбург: УГТУ, 1998. 13с.
Заполнить форму текущей работой
Купить готовую работу

ИЛИ