-
+53.4
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#include <iostream>
using namespace std;
struct CandyBar
{
char name[20];
float weight;
int energy;
};
int main()
{
CandyBar * snack = new CandyBar;
*snack =
{
"Moncha Munch",
2.3,
350
};
cout << "Имя = " << *snack->name;
cout << "\nМасса = " << (*snack).weight;
cout << "\nЭнергетическая ценность = " << snack->energy << "\n";
return 0;
}
unnicked,
09 Февраля 2010
-
+61.9
- 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
//Обьявление класса в хедере с последующей реализацией:
template<class TConstructStrategy>
class TClass
{
public:
TConstructStrategy __ctor;
//...Прочие методы...
};
//...Реализация прочих методов класса...
//================================================================
//Конструктор с переменным числом параметров, типа функтор:
//Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
typedef void TConstract(int a);
template<>
TClass<TConstract>::TClass(int a)
{
//doing...
};
int main(int argc, char* argv[])
{
//...
TClass<TConstract> A(5);
//...
}
Это говнокод, но не результат работы над проектом, а результат насмешек над компилятором MSVC 6.0.
Основано на обявлении типа-функции:
typedef void TConstract(int a);, но тк конструктор не функция - используется внутренее имя конструктора MSVC6.0:
void __ctor(void);, согласно которому он всё-таки функция.
__dtor - "внутренее" имя деструктора, кстати.
Спалить "секретное" имя обычно можно в сообщениях об ошибках c участием этих имён. При входе в конструктор/деструктор через отладчик под дизасемблером(наверное). В стеке вызовов отладчика(наверное). Наверное ещё как-нибудь, например проходом HEX редактора по экзешнику компилятора и прилижащим dll...
Итак для обсуждения (хотя и не собираюсь это использовать):
1)Как ещё, кроме странных пергрузок, представленного выше метода конструктора-функтора, и вызовов типа A.__ctor(); / A.__dtor() это можно использовать?
2)Какие "скрытые" имена конструкторов/деструкторов у других компиляторов? Я пробовал в MSVC6.0. В MSVS 2008 при первом расмотрении "внутреннее" имя другое и сходу не палится.
Для примера приведу метод с "обычным" функтором (на самом деле он не самый обычный):
//Обьявление класса в хедере с последующей реализацией:
template<class TStrategy>
class TClass
{
public:
TStrategy func;
//...Прочие методы...
};
//...Реализация прочих методов класса...
//================================================================
//Функтор:
//Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
typedef void TFunc(void);
template<>
void TClass<TFunc>::func(void)
{
//doing...
};
int main(int argc, char* argv[])
{
//...
TClass<TFunc> A;
A.func();
//...
};
fake_guest,
05 Февраля 2010
-
+56.5
- 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
void ff(const TCHAR *curDir)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
TCHAR cd[MAX_PATH], res[MAX_PATH], dirname[MAX_PATH], filename[MAX_PATH];
strcpy_s(cd, MAX_PATH, curDir);
strcat_s(cd, MAX_PATH, "\\*.*");
hFind = FindFirstFile(cd, &FindFileData);
BOOL r = hFind != INVALID_HANDLE_VALUE;
while (r)
{
r=FindNextFile(hFind, &FindFileData);
if (FindFileData.cFileName[0] != '.') try
{
strcpy_s(cd, MAX_PATH, curDir);
strcat_s(cd, MAX_PATH, "\\");
strcat_s(cd, MAX_PATH, FindFileData.cFileName);
if (!r) // если ссылка последняя смысле handle то записываем имя файла
strcpy_s(filename, MAX_PATH, FindFileData.cFileName);
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
ff(cd);
else
{
char* k=NULL;
if (!r)
k=strstr(filename,FindFileData.cFileName); // проверяем если является имя каталога подстрокой в имени файла хреначим на вывод(при том что ссылка была последней)
// смысле на вывод хреначим вот здесь
if (k!=NULL)
{
CharToOem(cd, res);
cout<<res<<endl;
}
}
}
catch(...)
{
cout<<"Can not display file name"<<endl;
}
}
}
xXx_totalwar,
05 Февраля 2010
-
+48.3
- 1
- 2
- 3
- 4
- 5
- 6
#define begin {
#define end }
//....
#define repeat do{
#define until(a) }while(!(a))
// и т.д.
Боян, конечно, просто вспомнил, глядя на предыдущий говнокод с макросами. Это в институте препод на одной из лекций всерьёз писал на доске.
Видимо, паскальщик еще советской закалки :)
GovnocoderJr,
02 Февраля 2010
-
+144.7
- 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
#include <iostream>
#define lulz int
#define lulZ main()
#define luLz {
#define luLZ }
#define lUlz cout
#define lULz cin
#define lUlZ ;
#define LuLZ <<
#define LuLz >>
#define LULz =
#define LULZ +
#define lolz endl
lulz lulZ
luLz
lulz Lulz lUlZ
lUlz LuLZ" Смешная сумма " LuLZ lolz lUlZ
lULz LuLz Lulz lUlZ
lUlz LuLZ Lulz lUlZ
lUlz LuLZ" + " lUlZ
lulz lULZ lUlZ
lUlz LuLZ "LULZ?" LuLZ lolz lUlZ
lULz LuLz lULZ lUlZ
lUlz LuLZ Lulz LuLZ " + " LuLZ lULZ LuLZ " = " LuLZ Lulz + lULZ lUlZ
luLZ
"Смешная сумма" (c) автор
darkcheg,
02 Февраля 2010
-
+63.8
- 1
const size_t& len() const {return _c_str?_len:*(size_t*)0;} //нах это нужно??
P.S. А Я САМ НЕ ЗНАЮ ГДЕ ЗДЕСЬ СИ-КРЕСТ-КРЕСТ!!!!1
GovnocoderJr,
02 Февраля 2010
-
+55.5
- 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
//------------------------------- COMPARE -------------------------------------
// Function to compare two strings on a mask, using a question mark and
// asterisk.Question mark matches any single character. The asterisk matches
// any signs of a minimum length of zero. maximum length is not limited. Only
// the next character in the mask has a value when there is a coincidence.
int compare(const char pat[],const char text[],int rec_ex)
{
bool flag = false; // flag show if working on "star"
int pat_len ,txt_len, // lehtghs of pattern and text
flagc, // counter and position i check
shift=0; // shift position
pat_len = (int)strlen(pat); // get lehtgh of pattern
txt_len = (int)strlen(text); // get lehtgh of text
if(rec_ex == 1 || (!pat_len && !txt_len)) // check if have to check some
return(1); // if yes return 1 or if have exit
else if(rec_ex == pat_len) // else return 0 becose not check that
return (0); // return 0
for(flagc=0;flagc < pat_len;flagc++)
if(pat[flagc] == '*' && flagc + 1 == pat_len)
return(compare(pat,text,1));// end of check return 1
else if(pat[flagc] == '*')
flag = true; // start * compare set flag true
else if(pat[flagc] != '?')
{
if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && !flag)
return(compare(pat,text,pat_len)); // bad char and no star
else if(toupper(pat[flagc]) == toupper(text[flagc+shift]) && flag)
flag = false; // set flag false position
else if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && flag)
shift++;
}
else if(pat[flagc] == '?')
{ // check if have ? in star operation
if(toupper(pat[flagc]) == toupper(text[flagc+shift]) && flag)
flag = false; // set flag false position
else if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && flag)
shift++; // add one more into shift
}
if((flagc+shift < txt_len && !flag) // text have nore chars and
|| (flagc+shift == txt_len +1 && pat[pat_len+1] != '*'))
return(compare(pat,text,pat_len)); // and next char in pattern no star
else
return(compare(pat,text,1)); // end of pattern and text
}
Вот на после завтра нужно по программированию функцию написать- рекурсивную для сравнения строк по маске.
Написал :-) якобы рекурсивную функцию :-)
werd,
01 Февраля 2010
-
+146.9
- 1
- 2
- 3
- 4
class ToBeOrNotToBe{};
void distortion(ToBeOrNotToBe...)
{
}
Код компилируется в 2008 MVS
Barmaglot,
28 Января 2010
-
+72.4
- 1
- 2
- 3
- 4
- 5
this->pRCH->setChckSize(this->pRCH->getChckSize() +
this->pvRP->at(this->pvRP->size() - 1)->getRHBidR()->getRHBSize()
+ sizeof(*this->pvRP->at(this->pvRP->size() - 1)->getRHBidR()->getRHBid()));
this->pRBCH->setChckSize(this->pRBCH->getChckSize() +
this->pvRP->at(this->pvRP->size() - 1)->getRHBR()->getRHB()->getRBSize());
Автор кода отчаянно доказывал прямоту кода...
Methos,
28 Января 2010
-
+923.7
- 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
vector<
#ifdef O_UNICODE
wstring
#else
string
#endif
> get_file_list(
#ifdef O_UNICODE
wstring
#else
string
#endif
dir) {
#ifdef O_UNICODE
wdirectory_iterator
#else
directory_iterator
#endif
e;
vector<
#ifdef O_UNICODE
wstring
#else
string
#endif
> ret;
for (
#ifdef O_UNICODE
wdirectory_iterator
#else
directory_iterator
#endif
d(dir); d != e; d++) {
if (is_directory(d->status())) {
vector<
#ifdef O_UNICODE
wstring
#else
string
#endif
> tmp = get_file_list(dir +
#ifdef O_UNICODE
L
#endif
"\\" + d->filename());
for (unsigned int i = 0; i < tmp.size(); i++)
ret.push_back(tmp[i]);
} else
ret.push_back(dir +
#ifdef O_UNICODE
L
#endif
"\\" + d->filename());
}
return ret;
}
Условная компиляция, однако
braindead,
28 Января 2010