Друзья шаблона класса |
Примеры отчетов |
next C++ |
Ссылки |
Улучшения языка C |
Классы |
Перегрузка функций и операций |
Шаблоны |
Наследование |
Исключительные ситуации |
STL |
Курсовая работа |
Вопросы к экзамену |
Конструктор: Rational(a,b) Операции: x+y, x-y, x*y, x/y, x+=y, x-=y, x*=y, x/=y, x>y, x<y, x>=y, x<=y, x==y, x!=y !x (x равно нулю) где x,y - рациональные числа или long (определить преобразование long->Rational) вывод, ввод в виде 3/5 Методы: long getp(); (числитель) long getq(); (знаменатель)
Конструктор: Vector(x,y) Операции: a+b, a-b, a+=b, a-=b, a*b (скалярное произведение), a==b, a!=b !a (a является нулевым вектором), a/z, z*a ("масштабирование" вектора) где a,b - вектора, z - double вывод, ввод в виде (1.4,-2.5) Методы: double getx(); double gety();
Конструктор: Complex(a,b) Операции: x+y, x-y, x*y, x/y, x+=y, x-=y, x*=y, x/=y, x==y, x!=y, !x (x равно 0) где x,y - комплексные числа или double (определить преобразование double->Complex) вывод, ввод в виде 1.5+2.2i Методы: double getReal(); (реальная часть) double getImaginary(); (мнимая часть)
Конструктор: Polar(r,phi) Операции: x+y, x-y, x+=d, x-=d (поворот вектора на d градусов), x*=d, x/=d (увеличение/уменьшение вектора в d раз), d*x (увеличенный в d раз вектор x, x не изменять!), x==y, x!=y, !x (x является нулевым вектором) где x,y - вектора в полярных координатах, d - double вывод, ввод в виде (5.1,30.5) Методы: double getLength(); double getAngle();
Конструктор: Rect(l,t,r,b) Операции: x*y (пересечение, функция), x+y ("объединение", охватывающий прямоугольник минимального размера, функция), x*=y (заменить пересечением) x+=y (расширить x, заменив охватывающим) x==y, x!=y, x<=y (x полностью лежит в y), x>=y (наоборот, y в x), !x (x является результатом пересечения прямоугольников, не имеющих общих точек) где x,y - прямоугольники вывод, ввод в виде [0,5,40,20] Методы: int getLeft(); int getTop(); int getRight(); int getBottom();
Конструктор: Set32() (первоначально пустое) Операции: x*y (пересечение), x*=y, x+y (объединение), x+=y, x+=z (включение числа z в множество), x-y (разность множеств), x-=y, x-=z (исключение числа z из множества), x==y, x!=y, x<=y (x подмножество или равно y, x ⊆ y), x>=y (x ⊇ y), z<=x (проверка вхождения числа z в множество x, z ∈ x), x>=z (x ∋ z), !x (x - пустое множество, x ≡ ∅) где x,y - множества, z - целое число от 0 до 31 вывод, ввод в виде {1,2,5}
Конструктор: Segment(a,b) Операции: x*y (пересечение), x+y ("объединение", охватывающий отрезок минимального размера), x==y, x!=y, x<=y (x полностью лежит в y), x>=y (наоборот, y в x), !x (x является результатом пересечения отрезков, не имеющих общих точек) x+=d (сдвинуть правый край отрезка на d), x-=d (сдвинуть левый край отрезка на d), x>=d, d<=x (проверка попадания числа d в отрезок x) где x,y - отрезки, d - double вывод, ввод в виде [0,5.5] Методы: double getLeft(); double getRight();
Конструктор: Angle(g[,m[,s]]) Операции: x+y, x-y, (увеличить/уменьшить угол на соответствующий угол) x+=y, x-=y, z*x, x/z, (увеличить/уменьшить угол в z раз) x*=z, x/=z, x==y, x!=y, !x (x равен нулю) где x,y - углы, z - целое число >=1 вывод, ввод в виде 5^16'25" Методы: int getGrad(); [0..359] int getMin(); [0..59] int getSec(); [0..59]
Конструктор: Vector(x,y,z) Операции: a+b, a-b, a+=b, a-=b, a*b (скалярное произведение), a==b, a!=b !a (a является нулевым вектором), a/z, z*a ("масштабирование" вектора) где a,b - вектора, z - double вывод, ввод в виде (1.4,-2.5,3.1) Методы: double getx(); double gety(); double getz();
Конструктор: Date(y,m,d) Операции: x+z, z+x (добавить к дате число дней z), x+=z, x-z (убавить дату на число дней z), x-=z, x-y (количество дней между датами), x==y, x!=y, x<=y, x<y, x>=y, x>=y, ++x, --x, x++, x--, где x,y - даты, z - целое число вывод, ввод в виде 31/12/2004 Методы: int getYear(); [1..2999] int getMonth(); [1..12] int getDay(); [1..31]
Конструктор: Length(y[,f[,i[,p]]]) Операции: x+y, x-y, (увеличить/уменьшить длину на соответствующую длину) x+=y, x-=y, z*x, x/z, (увеличить/уменьшить длину в z раз) x*=z, x/=z, x==y, x!=y, x<y, x>y, x<=y, x>=y, !x (x равна нулю) где x,y - длины, z - целое число >=1 вывод, ввод в виде 5.2.4.30 Методы: int getYard(); [0..oo] int getFoot(); [0..2] int getInch(); [0..11] int getPoint(); [0..71]
Конструктор: Rational(a,b) Операции: x+y, x-y, x*y, x/y, x+=y, x-=y, x*=y, x/=y, x>y, x<y, x>=y, x<=y, x==y, x!=y !x (x равно нулю) где x,y - рациональные числа или long (определить преобразование long->Rational) вывод, ввод в виде 3/5 Методы: long getp(); (числитель) long getq(); (знаменатель)
Конструктор: Complex(a,b) Операции: x+y, x-y, x*y, x/y, x+=y, x-=y, x*=y, x/=y, x==y, x!=y, !x (x равно 0) где x,y - комплексные числа или double (определить преобразование double->Complex) вывод, ввод в виде (1.5,2.2) Методы: double getReal(); (реальная часть) double getImaginary(); (мнимая часть)
Конструктор: Length(m[,y[,f[,i]]]) Операции: x+y, x-y, (увеличить/уменьшить длину на соответствующую длину) x+=y, x-=y, z*x, x/z, (увеличить/уменьшить длину в z раз) x*=z, x/=z, x==y, x!=y, x<y, x>y, x<=y, x>=y, !x (x равна нулю) где x,y - длины, z - целое число >=1 вывод, ввод в виде 2m 5y 2f 4i Методы: int getMile(); [0..∞] int getYard(); [0..1759] int getFoot(); [0..2] int getInch(); [0..11]
Конструктор: Polar(r,phi) Операции: x+y, x-y, x+=d, x-=d (поворот вектора на d градусов), x*=d, x/=d (увеличение/уменьшение вектора в d раз), d*x (увеличенный в d раз вектор x, x не изменять!), x==y, x!=y, !x (x является нулевым вектором) где x,y - вектора в полярных координатах, d - double вывод, ввод в виде 5.1@30.5 Методы: double getLength(); double getAngle();
Конструктор: Set32() (первоначально пустое) Операции: x*y (пересечение), x*=y, x+y (объединение), x+=y, x+=z (включение числа z в множество), x-y (разность множеств), x-=y, x-=z (исключение числа z из множества), x==y, x!=y, x<=y (x подмножество или равно y, x ⊆ y), x>=y (x ⊇ y), z<=x (проверка вхождения числа z в множество x, z ∈ x), x>=z (x ∋ z), !x (x - пустое множество, x ≡ ∅) где x,y - множества, z - целое число от 0 до 31 вывод, ввод в виде (1 2 5)
Конструктор: Time(h[,m[,s]]) Операции: x+y, x-y, (увеличить/уменьшить время на соответствующий время) x+=y, x-=y, z*x, x/z, (увеличить/уменьшить время в z раз) x*=z, x/=z, x==y, x!=y, x<y, x>y, x<=y, x>=y, !x (x равно нулю) где x,y - время, z - целое число >=1 вывод, ввод в виде 5:16:05 Методы: int getHour(); [0..∞] int getMin(); [0..59] int getSec(); [0..59]
Конструктор: Segment(a,b) Операции: x*y (пересечение), x+y ("объединение", охватывающий отрезок минимального размера), x+=y, x*=y, x==y, x!=y, x<=y (x полностью лежит в y), x>=y (наоборот, y в x), !x (x является результатом пересечения отрезков, не имеющих общих точек) x>=d, d<=x (проверка попадания числа d в отрезок x) где x,y - отрезки, d - double вывод, ввод в виде [0,5.5] Методы: double getLeft(); double getRight();
Конструкторы: String(char * =""), копий Операции: x+y, x+=y, x=y, x[i], x>y, x<y, x>=y, x<=y, x==y, x!=y, !x (x - пустая строка) где x,y - строка или char * вывод, ввод в виде "te\"xt" Методы: int length(); const char *c_str(); (строка)
Конструктор: Vector(n), копий Операции: x+y, x+=y, x=y, x[i], x==y, x!=y, где x,y - векторы вывод, ввод в виде {1.0,2.0,3.5} Методы: int size();
Конструктор: Rect(l,t,r,b) Операции: x*y (пересечение, функция), x+y ("объединение", охватывающий прямоугольник минимального размера, функция), x+=y (расширить x, заменив охватывающим) x*=y (заменить пересечением) x==y, x!=y, x<=y (x полностью лежит в y), x>=y (наоборот, y в x), !x (x является результатом пересечения прямоугольников, не имеющих общих точек) где x,y - прямоугольники вывод, ввод в виде [0 5 40 20] Методы: int getLeft(); int getTop(); int getRight(); int getBottom();
Конструктор: Vector(x,y,z) Операции: a+b, a-b, a+=b, a-=b, a*b (скалярное произведение), a==b, a!=b !a (a является нулевым вектором), a/z, z*a ("масштабирование" вектора) где a,b - вектора, z - double вывод, ввод в виде (1.4 -2.5 3.1) Методы: double getx(); double gety(); double getz();
Конструктор: Time(h[,m[,s]]) Операции: x+y, x-y, (увеличить/уменьшить время на соответствующий время) x+=y, x-=y, ++x, --x, x++, x-- (изменить время на секунду) z+x, x+z, x-z, (изменить время на z секунд) x+=z, x-=z, x==y, x!=y, x<y, x>y, x<=y, x>=y, !x (x равно нулю) где x,y - время, z - целое число >=1 вывод, ввод в виде 5:16:05 Методы: int getHour(); [0..23] int getMin(); [0..59] int getSec(); [0..59]
Конструктор: Vector(x,y) Операции: a+b, a-b, a+=b, a-=b, a*b (скалярное произведение), a==b, a!=b !a (a является нулевым вектором), a/z, z*a ("масштабирование" вектора) где a,b - вектора, z - double вывод, ввод в виде (1.4 -2.5) Методы: double getx(); double gety();
Конструктор: Vector(n), копий Операции: x+y, x+=y, x=y, x[i], x==y, x!=y, где x,y - векторы вывод, ввод в виде (1.0 2.0 3.5) Методы: int size();
Конструктор: String(char * =""), копий Операции: x+y, x+=y, x=y, x[i], x>y, x<y, x>=y, x<=y, x==y, x!=y, !x (x - пустая строка) где x,y - строка или char * вывод, ввод в виде 'te''xt' //апострофы удваиваются Методы: int length(); const char *c_str(); (строка)
Vector a(0,0),b(1.5,0.3); cout<<"Введите вектор a:"<<endl; cin>>a; //нужно ввести (1.2,3.2) вместе со скобками и запятой cout<<a<<" + "<<b<<" = "<<(a+b)<<endl; // печатается (1.2,3.2) + (1.5,0.3) = (2.7,3.5)II. Реализовать main c тестами (создание объектов и выполнение действий с ними)
Для вариантов 8,11,14,17,23 можно хранить все значения в виде одного числа: время в секундах, длина в дюймах и т.д.
Например, для класса Time
class Time { int sec; public: Time(int h=0, int m=0, int s=0):sec(h*3600+m*60+s){}
Методы для чтения отдельных составляющих
int getHour() const { return sec/3600; } int getMin() const { return sec/60%60; } int getSec() const { return sec%60; }
Операции можно определять в одну строку:
Time& operator+=(Time t) { sec+=t.sec; return *this; } Time& operator*=(int z) { sec*=z; return *this; }
Другим способом является хранение отдельных полей, но для вычислений определить два метода - получение значений полей в виде одного числа и разбиения числа на несколько полей. Этот способ подходит для варианта 10, где формулы занимают несколько строк:
class Date { int day,month,year; int toJDN() const; void fromJDN(int JDN); public: Date(int y=0, int m=0, int d=0):day(d),month(m),year(y){} int getDay() const { return day; } ...
Операции также можно определять почти в одну строку:
Date& operator+=(int d) { fromJDN(toJDN()+d); return *this; } int operator-(const Date& y) const { return toJDN()-y.toJDN();