- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
class radian
{protected:
double x;
public:
radian();//конструктор без параметров, возвращает дежурное значение
radian(double x1);//конструктор с параметрами
radian sum_rad(radian a );
radian unsum_rad(radian a);//разность 2-х радиан
double get_r(){return x;}//нужный геттр
void set_r(double x1);//бесполезный сеттрер
double radian::quarter(radian a);//определение четверти угла заданного в радианах
double operator *();//перегрузка операции. возводит во вторую степень
double radian::rad_to_grad();//перевод из радиан в градусы
~radian();//деструкторуу
};
class namerad:public radian
{
private:
string name;
public:
namerad::namerad(double corner,string name)
{set_name(name);}
void namerad::set_name(string newname)
{name=newname;}
void namerad::get_name(string currentname)
{currentname=name;}
};
radian::radian()//конструктор по умолчанию
{
x=0;
}
radian::radian(double x1)//конструктор с 1 параметром
{
x=x1;
}
radian radian::sum_rad(radian a)//сумма 2-х радиан
{radian n(x+a.x);
return n;
}
void radian::set_r( double x1)//сеттер
{ x=x1;}
radian::~radian() {x=0;}//деструктор
radian radian::unsum_rad(radian a)//разность 2-х радиан
{radian n(x-a.x);
return n;
}
double radian::rad_to_grad() //перевод из радиан в градусы
{
return(x*(180/3.14));
}
double radian ::operator *()//перегрузка операции
{
return x*x;
}
double radian::quarter(radian a)//определение четверти угла заданного в радианах
{while(a.x>6.28){a.x-=6.28;}
if ((a.x >=0)&&(a.x<=1.57)) return 1;
if ((a.x>=1.57)&&(a.x<=3.14)) return 2;
if ((a.x>=3.14)&&(a.x<=4.71)) return 3;
return 4;
}
int main()
{
radian a,b,c(5.0),d(6.20);
cout<<"summa=";b=c.sum_rad(d);cout<<b.get_r() << endl;//сумма
cout<<"raznost=";b=d.unsum_rad(c);cout<<b.get_r() << endl; //разность
cout<<"chetvert: ";cout<< d.quarter(d) << endl;//четверть
cout<<"iz radian v gradusi: ";cout<<d.rad_to_grad() << endl;//перевод из радиан в градусы
cout<<"peregruz sqr "<<*c;//возведение в квадрат. перегруженная операция
system ("PAUSE");
return 0;
}
LispGovno 04.12.2012 00:36 # +2
bormand 04.12.2012 05:55 # +3
Во-первых классическое бессмысленное и беспощадное мсвизуалстудиеблядство system("PAUSE").
Во-вторых тот же гцц докопается до double radian::quarter(radian a) в описании класса, и скажет что он не нужен.
govnomonad 04.12.2012 04:53 # 0
Целых четыре пробела. Какая расточительность!
bormand 04.12.2012 06:37 # +2
Феноменальная точность, даже не снившаяся ученым!
> a.x>=3.14
Т.е. 3.141 находится в третьем квадранте... *facepalm.png*
> radian::~radian() {x=0;}
Я всегда зануляю POD'ы в деструкторе, POD'ы сами не занулятся... (Зануление полей в деструкторе имеет смысл разве что в криптографии).
suc-daniil 04.12.2012 09:52 # 0
bormand 04.12.2012 11:33 # 0
vovkalamer 04.12.2012 06:39 # 0
bormand 04.12.2012 06:55 # +1
Вы серьезно считаете, что этот унарный оператор - умножение? *facepalm.png*
> супердеструкторэтот
Да, этот момент радует. Товарищу можно писать криптографические средства. Чистить за собой память он уже научился.
P.S. А пи округленное до 3.14 разве не радует? ;)
vovkalamer 04.12.2012 06:57 # 0
bormand 04.12.2012 07:13 # +1
Для имитации которого, собственно и служит данный оператор (при вменяемом применении для всяких там умных указателей и итераторов). Никакого отношения к умножению он не имеет, кроме, разве что, случайного совпадения символа.
Так что *facepalm.png* остается в силе.
vovkalamer 04.12.2012 07:25 # +1
bormand 04.12.2012 07:27 # 0
Lure Of Chaos 06.12.2012 00:39 # 0
Steve_Brown 06.12.2012 11:34 # 0
TarasB 06.12.2012 11:36 # +2
LispGovno 04.12.2012 07:35 # 0
> Да, этот момент радует
Согласитесь, штука то полезная. Никаких варнингов. Ничего. Без этого мегадеструктора мы бы и не заметели косяка:
http://ideone.com/CMkxXu
bormand 04.12.2012 07:48 # 0
P.S. gcc 4.6
1.cpp:12: предупреждение: возврат ссылки на временную переменную
bormand 04.12.2012 08:15 # +1
TarasB 04.12.2012 10:09 # +1
bormand 04.12.2012 11:31 # 0
Или такого? a+bi -> a-bi
TarasB 04.12.2012 11:37 # 0
Про сопряжение дуг - как ты себе это представляешь?
bormand 04.12.2012 12:03 # +1
Хотя... есть проблема - решение не одно.
TarasB 04.12.2012 12:11 # 0
1. в общем случае решений нет.
2. ты проебал слово "унарный"
bormand 04.12.2012 12:24 # 0
Кинуть исключение.
> ты проебал слово "унарный"
Да, правда, позор на мои седины.
TarasB 04.12.2012 13:26 # −4
"В общем случае" - это значит, что если мы возьмём две случайные дуги, то с вероятностью 100% их нельзя сопрячь. Это как для двух прямых в пространстве с вероятностью 100% не существует точки пересечения.
Кидание исключений при возникновени события, вероятность которого больше 50%, не говоря уже наш случай - это долбоебизм.
Steve_Brown 04.12.2012 13:36 # +7
bormand 04.12.2012 15:18 # +3
Ебанулся тут ты. Зачем я буду давать алгоритму 2 случайным образом выбранных дуги? Ему с вероятностью 99% на вход подадут две дуги, которые вполне сопрягутся, иначе нахуй бы я пытался это сделать? А оставшийся 1% это ошибки человека, или алгоритма генерившего дуги, на которые вполне можно выдать исключение.
P.S. Steve_brown правильно написал, по твоей логике открывать файл тоже не имеет смысла, т.к. если случайно генерить имя файла, то с вероятностью почти 100% он не будет существовать.
TarasB 04.12.2012 15:27 # +2
1. Потому что если мы пишем алгоритм, который может принимать на вход не любые данные, то давать ему имя оператора - это долбоебизм.
2. Что это за алгоритм, в котором надо найти сопряжение двух дуг, причём известно, что сопряжение есть? Скорее всего, это означает, что эти две дуги были хитрым образом обрезаны и в процессе обрезания уже были получены все данные, нужные для построения сопрягающей дуги. Вызов функции (не оператора, а функции), принимающей голые дуги - не нужен.
3. Оператор, кидающий исключение с вероятностью 100% на случайных данных - это долбоебизм.
bormand 04.12.2012 15:43 # +2
Тот, кто сделал деление оператором - долбоёб? Оно ведь принимает на вход далеко не любые значения.
> Скорее всего, это означает, что эти две дуги были хитрым образом обрезаны и в процессе обрезания уже были получены все данные, нужные для построения сопрягающей дуги.
Тут согласен. В том же черчении сопряжению предшествовала бы обрезка уголка.
> 3. Оператор, кидающий исключение с вероятностью 100% на случайных данных - это долбоебизм.
Унарный оператор *, разадресовывающий указатели смотрит на тебя с недоумением. P.S. Ах да, он же не кидает исключение, он падает к хуям почти на всех входных значениях, кроме жалкой горстки, но не бросая исключения не нарушает твою теорию.
TarasB 04.12.2012 15:54 # 0
Исключений очень мало.
Для сопряжения дуг всё наоборот - существование сопряжения - это исключение с исчезающе малой вероятностью.
> Унарный оператор *, разадресовывающий указатели смотрит на тебя с недоумением.
Хорошо, { оператор, мимикрирующий под { стандартный, допускающий любые входные данные } , для которого корректные входные данные являются исключением} - долбоебизм.
(кстати, как это положено делать по правилам русского языка?)
bormand 04.12.2012 16:03 # +4
Ок, с этим я поспорить не смогу, т.к. заставлять оператор выполнять функционал, отличающийся от мимикрии под его стандартную версию - уже плохое решение.
Да-да, все эти возведения в квадрат звездочкой, комплексные сопряжения звездочкой, длину вектора логическим отрицанием, вывод в поток через операторы сдвига, это плохие, неинтуитивные, решения.
TarasB 04.12.2012 16:10 # +1
Говно
> комплексные сопряжения звездочкой
Говно. Надо на ~ переделать, мне кажется.
> длину вектора логическим отрицанием
Надо подумать... Сходу не скажу.
> вывод в поток через операторы сдвига,
Годнота! Не трогать!
bormand 04.12.2012 16:42 # +1
d = c.conjugate();
> Надо подумать... Сходу не скажу.
Да говно конечно, v.length(), v.manhattanLength() всяко будут понятнее.
> Годнота! Не трогать!
У них приоритеты не совсем удачные.
roman-kashitsyn 04.12.2012 16:54 # 0
mahnattan
bormand 04.12.2012 17:10 # +1
manHunt'an тогда уж.
Steve_Brown 05.12.2012 11:27 # +2
можно еще ввести оператор || - норма. Только вот он может быть только инфиксным, но вторым аргументом можно передавать порядок.
vec || 2 - обычная евклидова норма
vec || 1 - сумма модулей
vec || Inf - Манхеттен.
bormand 04.12.2012 15:38 # −1
Ебанись!
Если я возьму две прямых, то они не пересекутся только в одном случае - если у них совпал угол наклона. А вероятность этого равна нулю (1 случай против бесконечного множества прямых, проходящих под другими углами).
Две прямые в пространстве пересекутся с вероятностью 100%, а параллельные прямые это вырожденный случай, которого не бывает.
TarasB 04.12.2012 15:44 # +3
bormand 04.12.2012 15:48 # 0
Steve_Brown 04.12.2012 10:32 # +4
Град (гон) — единица измерения плоских углов, 1/400 оборота - Gradian.
Градус - degree.
Ну а так что? Чей-то первый класс с признаками полезности. На ошибках учатся. Желаем дальнейших успехов в изучении программирования.
wvxvw 04.12.2012 12:43 # +5
SadKo 05.12.2012 11:44 # +1
Lure Of Chaos 06.12.2012 00:41 # +2
bormand 06.12.2012 05:49 # +1