-
+1
- 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;
}
vovkalamer,
03 Декабря 2012
-
+12
- 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
#include <iostream>
#include <functional>
using namespace std;
struct T
{
int a;
T(const T&):a(1){cout<<"copy_construct T"<<endl;}
T():a(1){cout<<"construct T"<<endl;}
~T(){a=0;cout<<"destruct T"<<endl;}
const T& operator=(const T&){cout<<"copy_ass T"<<endl;return *this;}
};
struct M: public T{};
void f(const T& fa)
{
cout<<"fa.a= "<<fa.a<<endl;
}
int main() {
f(std::cref(T()));
cout<<endl;
const T& b = T();
cout<<"b.a= "<<b.a<<endl;
cout<<endl;
const T& a = std::cref(T());
cout<<"a.a= "<<a.a<<endl;
return 0;
}
http://ideone.com/BmHo9w
Есть на этом ресурсе великий знаватель крестов и вот он меня уверял, что объект, на который ссылается ссылка - должен дожить до конца выхода ссылки из скоупа. Почему мы этого не наблюдаем? А знаватель? Ты меня прямо даже убедил, и тут такая подстава от тебя. a - не дожил до конца.
LispGovno,
03 Декабря 2012
-
+6
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
template <typename T, size_t rows, size_t cols>
class Matrix {
public:
Matrix() :
m_matrix(reinterpret_cast<T*>(new char[sizeof(T) * rows * cols]))
{
memset(m_matrix, 0, sizeof(T) * rows * cols);
new (m_matrix) T[rows * cols];
if ( rows == cols ) {
for ( size_t i = 0; i < rows; i++ )
m_matrix[i * cols + i] = 1; // FIXME: this is hack
}
}
// ...
private:
T *m_matrix;
};
Из прошлого куска.
Инициализируем память нулями. А вдруг тип скалярный? :)
Elvenfighter,
01 Декабря 2012
-
+10
- 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
template <typename T, size_t rows, size_t cols>
class Matrix {
public:
Matrix() :
m_matrix(new T[rows * cols])
{
// Make identity matrix, if possible
if ( rows == cols ) {
for ( size_t i = 0; i < rows; i++ )
m_matrix[i * cols + i] = 1; // FIXME: this is hack
}
}
// ...
Matrix<T, rows, cols>& operator =(Matrix<T, rows, cols> &&other) {
if ( this != &other ) {
delete [] m_matrix;
m_matrix = other.m_matrix;
other.m_matrix = new T[cols * rows];
other = static_cast<const Matrix&>(Matrix());
}
return *this;
}
// ...
};
Издержки move construtor :)
Прошу внимания к строчкам 19-23
Elvenfighter,
30 Ноября 2012
-
+14
- 1
int main(){(([](){})());}
preview.tinyurl.com/blrtfuo
ideone.com/BXrXDR
Или еще чуть веселее:
ideone.com/C425yo
Xom94ok,
30 Ноября 2012
-
+2
- 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
template <typename A, typename B>
class ololo
{
};
template <typename A>
class ololo <A, int>
{
};
template <typename A>
void bububu ()
{
}
template <>
void bububu <int> ()
{
}
template <typename A, typename B>
void kokoko ()
{
}
template <typename A>
void kokoko <A, int> ()
{
}
http://www.gamedev.ru/flame/forum/?id=169781
tarasboproblemi
LispGovno,
29 Ноября 2012
-
+19
- 1
- 2
- 3
- 4
Class1* c1 = (Class1*)malloc(sizeof(Class1)*N);
Class2* c2 = (Class2*)malloc(sizeof(Class2)*N);
for (long i = 0; i < N; i++) c1[i] = Class1();
for (long i = 0; i < N; i++) c2[i] = Class2();
Рассказать ему про new[] / delete[]?
runewalsh,
29 Ноября 2012
-
+12
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
#include <stdio.h>
#include <type_traits>
#include <string>
struct hack_t{};
template<class TYPE>static hack_t operator&(const TYPE&,hack_t){return hack_t();}
int main()
{
struct type{};
std::string var="win";
#define get_meta(var)[&]()->bool{hack_t unnamed;hack_t foo(var&unnamed);return std::is_function<decltype(foo)>::value;}()
bool result_0=get_meta(var);
bool result_1=get_meta(type);
#undef get_meta
printf("get_meta(var) == %s\n",result_0?"true":"false");
printf("get_meta(type) == %s\n",result_1?"true":"false");
return 0;
}
Код отличает переменную от типа.
http://ideone.com/t7BBO4
Сами знаете откуда.
LispGovno,
27 Ноября 2012
-
+10
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
//В mathc.hpp:
typedef float import (float);
//В неком cpp функция:
float cm() {
import calcFpu;
//...
float src = //...
float res = calcFpu(src);
return res;
}
//В mathc.cpp:
void calcFpu(float){
//...
void calcSSE(float){
//...
Мои глаза... В перлы.
http://ideone.com/RBAMyv
LispGovno,
27 Ноября 2012
-
+77
- 1
delete[] Memory, leak; //Унарные операторы, такие уринарные.
Былинный отказ.
igumnovf,
23 Ноября 2012