- •Конструкторы и перегрузка операций
- •Введение
- •Лабораторная работа № 1. Конструкторы
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Int hours, minutes, seconds; // закрытые поля
- •Int getDigitByPosition(int pos); // возврат цифры числа по позиции
- •Int transferTo10(); // перевод в десятичную систему счисления
- •Void transferFrom10(int numb); // перевод из десятичной системы счисления
- •Int p_number_class::getDigitByPosition(int pos) {
- •Int p_number_class::transferTo10() {
- •Void p_number_class::transferFrom10(int numb) {
- •Int main(int argc, char* argv[])
- •Лабораторная работа № 2. Перегрузка операций
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Void print(const Week &d) // вывод на экран названий дней недели
- •Int denum; // поля - открыты
- •Void reduce(); // метод - открыт
- •Int getDigitByPosition(int pos); // возврат цифры числа по позиции
- •Int transferTo10(); // перевод в десятичную систему счисления
- •Void transferFrom10(int numb); // перевод из десятичной системы счисления
- •Int p_number_class::getDigitByPosition(int pos) {
- •Int p_number_class::transferTo10() {
- •Void p_number_class::transferFrom10(int numb) {
- •Int main(int argc, char* argv[])
- •Библиографический список
Int getDigitByPosition(int pos); // возврат цифры числа по позиции
char getCharByDigit(int digit); // перевод числа в символьное представление
Int transferTo10(); // перевод в десятичную систему счисления
Void transferFrom10(int numb); // перевод из десятичной системы счисления
public:
// конструктор без аргументов (по умолчанию)
P_number_class() : scale_of_notation(2) {
strncpy(number,"0\0",2);
}
// конструктор инициализации
P_number_class(char *n, int s) : scale_of_notation(s) {
int len = strlen(n);
strncpy(number,n,len);
number[len] = '\0';
}
// конструктор копирования
P_number_class(P_number_class &pn) : scale_of_notation(pn. getScaleOfNotation()) {
int len = strlen(pn.getNumber());
strncpy(number,pn.getNumber(),strlen(pn.getNumber()));
number[len] = '\0';
}
char* getNumber();
unsigned int getScaleOfNotation();
// вывод значений полей на экран
friend ostream& operator<<(ostream& t, const P_number_class &r);
// ввод значений для полей
friend istream& operator>>(istream& t, P_number_class &r);
char* toString(); // метод преобразования в строку
friend P_number_class operator+(P_number_class &x, P_number_class &y); // сложение
friend P_number_class operator-(P_number_class &x, P_number_class &y); // вычитание
friend P_number_class operator*(P_number_class &x, P_number_class &y); // умножение
friend P_number_class operator/(P_number_class &x, P_number_class &y); // деление
friend bool operator==(P_number_class &x, P_number_class &y); // проверка на равенство
friend bool operator>(P_number_class &x, P_number_class &y); // проверка на то, что число больше
friend bool operator<(P_number_class &x, P_number_class &y); // проверка на то, что число меньше
};
char * P_number_class::getNumber()
{
return number;
}
unsigned int P_number_class::getScaleOfNotation()
{
return scale_of_notation;
}
ostream& operator<<(ostream& t, const P_number_class &r) // вывод полей на экран
{ return (t << "\n number: " << r.number << "\n scale_of_notation: " << r.scale_of_notation); }
istream& operator>>(istream& t, P_number_class &r) // ввод полей с клавиатуры
{ t >> r.number;
t >> r.scale_of_notation;
return t;
}
char* P_number_class::toString() // метод преобразования в строку
{
char string[25];
return strcat(strcat(number," в системе счисления "), itoa(scale_of_notation,string,10));
}
P_number_class operator+(P_number_class &x,P_number_class &y) // сложение
{
int num10 = x.transferTo10() + y.transferTo10();
P_number_class z(x);
z.transferFrom10(num10);
return z;
}
P_number_class operator-(P_number_class &x,P_number_class &y) // вычитание
{
int num10 = x.transferTo10() - y.transferTo10();
P_number_class z(x);
z.transferFrom10(num10);
return z;
}
P_number_class operator*(P_number_class &x,P_number_class &y) // вычитание
{
int num10 = x.transferTo10() * y.transferTo10();
P_number_class z(x);
z.transferFrom10(num10);
return z;
}
P_number_class operator/(P_number_class &x,P_number_class &y) // вычитание
{
int num10 = x.transferTo10() / y.transferTo10();
P_number_class z(x);
z.transferFrom10(num10);
return z;
}
bool operator==(P_number_class &x, P_number_class &y) // проверка на равенство
{
return (x.transferTo10() == y.transferTo10());
}
bool operator>(P_number_class &x, P_number_class &y) // проверка на то, что число больше
{
return (x.transferTo10() > y.transferTo10());
}
bool operator<(P_number_class &x, P_number_class &y) // проверка на то, что число меньше
{
return (x.transferTo10() < y.transferTo10());
}
char P_number_class::getCharByDigit(int digit) {
switch(digit) {
case 0 : return '0';
case 1 : return '1';
case 2 : return '2';
case 3 : return '3';
case 4 : return '4';
case 5 : return '5';
case 6 : return '6';
case 7 : return '7';
case 8 : return '8';
case 9 : return '9';
case 10 : return 'A';
case 11 : return 'B';
case 12 : return 'C';
case 13 : return 'D';
case 14 : return 'E';
case 15 : return 'F';
default : return '\0';
}
}
