Главный оффтопик - Флудилка

"Признаю свою вину, меру, степень, глубину"(С)
Но тянуться в личку было лень.
NTFS
так грустно... такое чувство будто я один совершенно один и никому не нужен. даже на том свете меня никто бы не пришел с цветами встречать...

Хотя мне некоторые люди важны - я бы их с цветами то и встречал.
Filael
NTFS писал(а):обобщенный метод с созданием обобщенного объекта?

Я не совсем пони, но вижу тут что-то похожее на шаблоны классов. Сам стараюсь с таким извратом дел не иметь, но однажды делал самописную очередь для свиборгов на телефон:
Код: Выделить всё
#ifndef _QUEUE_H_
#define _QUEUE_H_

template <typename Type>
class CQueue
{
private:
   struct Node { Type sItem; struct Node* sNext; };
   enum { EQueueSize = 1000 };
   Node*      iFront;
   Node*      iRear;
   int         iSize;
   const int   iMaxSize;

public:
   CQueue(int aSize = EQueueSize);
   ~CQueue();

   inline bool IsEmpty() const { return iSize == 0; };
   inline bool IsFull() const { return iSize == iMaxSize; };
   inline int Size() const { return iSize; };
   bool Enqueue(const Type& aItem);
   bool InsertAt(const Type& aItem, int aPosition);
   Type Dequeue();
   Type ItemAt(int aPosition);
};

template <typename Type>
CQueue<Type>::CQueue(int aSize):
iFront(NULL),
iRear(NULL),
iSize(0),
iMaxSize(aSize)
{
   
}

template <typename Type>
CQueue<Type>::~CQueue()
{
   Node* currentNode;

   while (iFront)
   {
      currentNode = iFront;
      iFront = iFront->sNext;
      delete currentNode;
   }
}

template <typename Type>
bool CQueue<Type>::Enqueue(const Type& aItem)
{
   return InsertAt(aItem, iSize);
}

template <typename Type>
bool CQueue<Type>::InsertAt(const Type& aItem, int aPosition)
{
   if ((aPosition < 0) || (iSize == iMaxSize))
      return FALSE;

   Node* newNode = new Node;
   
   if (!newNode)
      return FALSE;

   newNode->sItem = aItem;

   if (!iSize)
   {
      newNode->sNext = NULL;

      iFront   = newNode;
      iRear   = newNode;
   }
   else
   {
      if (aPosition == 0)
      {
         newNode->sNext = iFront;

         iFront = newNode;
      }
      else if (aPosition >= iSize)
      {
         newNode->sNext   = NULL;
         iRear->sNext   = newNode;

         iRear = newNode;
      }
      else
      {
         Node* currentNode = iFront;
         for (int i = 1; i < aPosition; i++)
            currentNode = currentNode->sNext;
         
         newNode->sNext = currentNode->sNext;
         currentNode->sNext = newNode;
      }
   }
   
   iSize++;

   return TRUE;
}

template <typename Type>
Type CQueue<Type>::Dequeue()
{
   if (!iSize)
      return NULL;

   Type item = iFront->sItem;
   Node* currentNode = iFront;
   iFront = iFront->sNext;
   delete currentNode;

   iSize--;

   if (!iSize)
      iRear = NULL;

   return item;
}

template <typename Type>
Type CQueue<Type>::ItemAt(int aPosition)
{
   if ((aPosition < 0) || (aPosition >= iSize))
      return NULL;

   if (aPosition == iSize - 1)
      return iRear->sItem;

   Node* currentNode = iFront;
   for (int i = 0; i < aPosition; i++)
      currentNode = currentNode->sNext;

   return currentNode->sItem;
}

#endif
Thunderstorm
Thunderstorm писал(а): но однажды делал самописную очередь для свиборгов на телефон:

Ну вот у тебя типичное использование, а вызова new для обобщенного типа тоже нету.
Возможно, это фишка C# - потому что java тоже не позволяет.
NTFS
Ааа... пони. Тебе не только сам шаблон класса нужен, но и функция, которая возвращает объект этого класса? Такое, кажется, тоже есть (но такой изврат я забыл после зачёта). Ща, учебник курну.

..Кстати, возвращается объект или указатель на него?
Попробуй так (не ручаюсь за эту фигню)
Код: Выделить всё
template <typename Type>
Type* createObj(String log)
{
    Console.WriteLine(log);
    return new Type();
}
Thunderstorm
Thunderstorm писал(а):(но такой изврат я забыл после зачёта

Вот как раз для зачёта мне это и надо :-)
Щас попробую, но у меня gcc выкидывало ошибку на все варианты. Еще студию попробую.
NTFS
Filael писал(а):так грустно... такое чувство будто я один совершенно один и никому не нужен. даже на том свете меня никто бы не пришел с цветами встречать...


Нужно взращивать свой внутренний свет.
Tammy
Filael писал(а):так грустно... такое чувство будто я один совершенно один и никому не нужен.

Изображение
Thunderstorm
У меня в браузере (хром) завелась какая-то [таинственная вещь] в виде постоянно всплывающей рекламы и периодическим киданием на какие-то сайты с казино. Я хоть и ламер, но вроде бы ничего подозрительного не качал и по ссылкам подозрительным не ходил. Посоветуйте, что делать.
Tammy
Оно скорее всего не в хроме, а в системе.
Антивирус стоит?
NTFS
А вот может и в хроме (хотя обычно такое г в эксплорер ставится).
Стандартно, "проверьте, воспроизводится ли в другом браузере, переустановите хром пришлите скриншот ошибки и поснифайте трафик"
Thunderstorm
NTFS писал(а):Оно скорее всего не в хроме, а в системе.
Антивирус стоит?


Нет. Но в IE вроде бы этого нет, таинственная штука завелась в хроме.

Thunderstorm писал(а):А вот может и в хроме (хотя обычно такое г в эксплорер ставится).
Стандартно, "проверьте, воспроизводится ли в другом браузере, переустановите хром пришлите скриншот ошибки и поснифайте трафик"


Я не хочу, чтобы всё избранное из хрома исчезло. :(
Tammy
Tammy писал(а):У меня в браузере (хром) завелась какая-то [таинственная вещь] в виде постоянно всплывающей рекламы и периодическим киданием на какие-то сайты с казино. Я хоть и ламер, но вроде бы ничего подозрительного не качал и по ссылкам подозрительным не ходил. Посоветуйте, что делать.

скорее всего ты куда то не то нажал и вот результат: к тебе в хром "прицепили" ненужную программу. лечится это настройками браузера
Filael
Tammy писал(а):
NTFS писал(а):Оно скорее всего не в хроме, а в системе.
Антивирус стоит?

Нет.

Ну поставь тот же бесплатный Avast, потом можешь удалить, если не нужен - но хотя бы найдешь пораженное место.
Я в хроме почти не работаю, так что по памяти настройки там не вспомню.
Если будет актуально через пару дней - на выходных стукнись в личку, помогу удаленно.
NTFS
А, НТФС, НТФС! Так вон у меня в свибоочереди метод Dequeue почти то что нужно делает. Только тебе желательно возвращать не объект, а указатель.
Thunderstorm
Он возвращает уже существующий объект. А мне нужно, чтобы вызывался new Type()
NTFS
Tammy писал(а):У меня в браузере (хром) завелась какая-то [таинственная вещь] в виде постоянно всплывающей рекламы и периодическим киданием на какие-то сайты с казино.

Ошибка №1 - Хром вместо браузера ))
Ошибка №2 - Отсутствие антивируса
Ошибка №3 - Тыканье мышом куда ни попадя

Во-первых, это не вирус, это файлики где-то во временных папках и файлах браузера. Почисти кэш, удали временные файлы и папки, лучше утилиткой какой-то, сам ты все руками выдолбить скорее всего не сможешь все найти и удалить. Прочекай папку для дефолтных загрузок браузера, может и там что-то быть. Проверь в настройках браузера установленные дополнения, могут быть лишние, там же где-то в настройках должна быть кнопка сброса к дефолтному состоянию, если не поможет остальное, нажми ее.

Скачай свежий CureIt запусти быструю проверку. Скачай AVZ (хотя я не уверен, что он все еще актуален) и проверь хотябы диск C, оперативку и т. п. Скачай и поставь бесплатный антивирь хоть какой-то. Хоть триал-версию на время, хоть бесплатное что-то от аваста до касперского. Включи адблок или его аналог в браузере и не выключай никогда. И поставь уже себе Огнелиса ))
ChainRainbow
ChainRainbow писал(а):И поставь уже себе Огнелиса ))


Огнелис - говно, никогда не буду использовать этот неудобный тяжеловесный браузер, но за советы спасибо)

Похоже, дело было в установленных дополнениях. Мда, всё оказалось слишком просто. Хотя, мб это временно...
Tammy
Tammy писал(а):Мда, всё оказалось слишком просто.

Увы, для большинства людей достаточно и этого.
ChainRainbow
NTFS писал(а):Он возвращает уже существующий объект. А мне нужно, чтобы вызывался new Type()

Не вижу, почему бы благородному дону Методу не создать внутри себя новый объект.
Или конпелятор видит?
Thunderstorm
ChainRainbow писал(а):Увы, для большинства людей достаточно и этого.


[подколол].
Tammy
Вот не хотел, честное слово!
ChainRainbow
Tammy писал(а):У меня в браузере (хром) завелась какая-то [таинственная вещь] в виде постоянно всплывающей рекламы и периодическим киданием на какие-то сайты с казино. Я хоть и ламер, но вроде бы ничего подозрительного не качал и по ссылкам подозрительным не ходил. Посоветуйте, что делать.

Была таж самая вещь,пришлось перейти на другой браузер... Эта дрянь вшилась в реестр наверно...
Ладно,всем паки\ноки и выспаться хорошо...Пусть обретется искомое...
Радужный Вихрь
ChainRainbow писал(а):Вот не хотел, честное слово!


Ой, вот не надо. Я запомнил!
Tammy
Да чего вы ве и всё сразу на себя примеряете, стоит только заговорить о большинстве или просто больших группах людей?! Словно за мной заржавело бы сказать конкретно, если бы так и хотел...
ChainRainbow
Thunderstorm писал(а):
NTFS писал(а):Он возвращает уже существующий объект. А мне нужно, чтобы вызывался new Type()

Не вижу, почему бы благородному дону Методу не создать внутри себя новый объект.
Или конпелятор видит?

Вот не получается так записать, чтобы вместо new MyClass() было new T(), где T - обобщенный параметр.
Объективности ради, Delphi и Java тоже послали лесом. Так что возможно, и C++ такое не позволит.

Кстати
ChainRainbow писал(а):Ошибка №1 - Хром вместо браузера ))

"Имя, сестра, имя!"(С)
Что использовать-то? Ну ладно, я сижу на Firefox, потому что там есть необходимые мне в работе дополнения - но они нужны очень узкому кругу, страшно далекому от народа.
Остаётся Опера (коммерческий), ИЕ (ужасен) и Сафари (на Windows ужасен,а Мак для мажоров). Про всякие Яндекс-броузеры не будем к ночи.
NTFS
Народ,пони\брони,мааааленькая идеё нарисовалась-понибудь может пони\моды к играм создавать...? Фаллоут 4,там есть кой какие,но...эта задумка особая... "Эксперимент" над замороженными!
Радужный Вихрь
ChainRainbow писал(а):Ошибка №1 - Хром вместо браузера ))

= )))
ChainRainbow писал(а):И поставь уже себе Огнелиса ))

*Обнял беседку^^*
С какой версии пользуешься? )

NTFS писал(а):
ChainRainbow писал(а):Ошибка №1 - Хром вместо браузера ))
"Имя, сестра, имя!"(С)
Что использовать-то? Ну ладно, я сижу на Firefox, потому что там есть необходимые мне в работе дополнения - но они нужны очень узкому кругу, страшно далекому от народа.
Остаётся Опера (коммерческий), ИЕ (ужасен) и Сафари (на Windows ужасен,а Мак для мажоров). Про всякие Яндекс-броузеры не будем к ночи.

Оперу не понял, хотя ей и восторгались необычайно.
ИЕ нужен под прошивальшики железа, ибо собран из стандартных инструметов, а не из косых, кривых, свистелко-перделок.
Сафари...а так ли он шикарен на Маке?..))
Лили в уши, про Vivaldi, но чет я не впечатлился.

Так что только Фаерфокс, для основной массы задач. Ну и спецдополнения, опять же ))
GARRI
GARRI писал(а):ИЕ нужен под прошивальшики железа

И под криптосистемы, ибо единственный броузер, который поддерживает все требования по безопасности - я долго бился, пытаясь настроить защищенный доступ к БКИ через Firefox, в итоге плюнул и поставил клиенту IE9.

GARRI писал(а):Сафари...а так ли он шикарен на Маке?..))

Если Мак за 70 тыс. рублей, то там шикарно будет всё что угодно.

GARRI писал(а):Так что только Фаерфокс, для основной массы задач.

Память у него сильно течет, но я просто взял за правило раз в 3-4 часа перезапускать броузер и это помогает.
NTFS
НТФС, УМВР. Но Р в шестой студии (других нет), насколько это 11 C++, не знаю.
Код: Выделить всё
#include <stdio.h>
#include <conio.h>

class CPoint
{
private:
   int iX;
   int iY;
public:
   CPoint(int aX = 0, int aY = 0):
   iX(aX),
   iY(aY)
   {

   }

   ~CPoint()
   {

   }

   void Set(int aX, int aY)
   {
      iX = aX;
      iY = aY;
   }

   void Print()
   {
      printf("X: %d, Y: %d\r\n", iX, iY);
   }

   CPoint operator++(int)
   {
      CPoint oldPoint(iX, iY);
      iX++;
      iY++;

      return oldPoint;
   }
};

template <typename Type> Type* createObj(char* str)
{
   Type* ptr = new Type();
   printf("%s %x\r\n", str, ptr);
   return ptr;
}

int main()
{
   int*   i   = createObj<int>("New int created. Address: ");
   float*   f   = createObj<float>("New float created. Address: ");
   double*   d   = createObj<double>("New double created. Address: ");
   char*   c   = createObj<char>("New char created. Address: ");
   CPoint*   p   = createObj<CPoint>("New CPoint created. Address: ");
   p->Set(15, 20);

   printf("\r\n");

   *i = 1;
   *f = 2;
   *d = 3;
   *c = 'a';

   (*i)++; (*f)++; (*d)++; (*c)++; (*p)++;

   printf("i: %d\r\n", *i);
   printf("f: %f\r\n", *f);
   printf("d: %f\r\n", *d);
   printf("c: %c\r\n", *c);
   p->Print();

   getch();
   return 0;
}
Thunderstorm
Вот всё то же самое делал - и не работало :-(
Скопировал твой код - запустилось нормально. Спасибо большое. Теперь с ограничениями шаблона и интерфейсами разобраться осталось, но то я уже сам документацию порою.

Thunderstorm писал(а):в шестой студии

Зачем?
NTFS
Это да, тоже сталкивался с такой магией: пишу - не работает, копирую то же самое из примеров - нормально О,..,о

Вообще, я бы шаблоны кроме как для контейнеров (очередь там, стек) не применял. Ну и для зачёта, да.

Симбиан поддерживал только шестую, а больше она мне ни за чем и не нужна была.
Thunderstorm
Thunderstorm писал(а):Вообще, я бы шаблоны кроме как для контейнеров (очередь там, стек) не применял.

В С-ориентированных языках, в отличии от ObjectPascal, нельзя использовать массив потомков как массив предков - потому любые групповые операции приходится делать через шаблоны или интерфейсы.


Зачем x2?

Хотя, порой хочется странного софта/железа, да.
NTFS
Чтоб на моём N-Gage была игра про пони и свиборгов, конечно. Со школы хотел игру на телефон сделать.

А теперь я!
NTFS писал(а):использовать массив потомков как массив предков

Зачем?
Thunderstorm
А как иначе загнать единорогов, пегасов и аликорнов в одну кровать коллекцию, а потом передать её какому-то методу?
Pascal это умел, сишные потомки - только через интерфейсы или шаблоны.
NTFS
NTFS писал(а):Что использовать-то? Ну ладно, я сижу на Firefox

Вот ты и ответил на свой опрос ))

NTFS писал(а):Остаётся Опера (коммерческий), ИЕ (ужасен) и Сафари (на Windows ужасен,а Мак для мажоров). Про всякие Яндекс-броузеры не будем к ночи.

Новая Опера - перелицованный хром, перелицовван хорошо, плюшки вкусные (тот же встроенный VPN) и привычные отчасти (потому что раньше сидел с Оперой старой), держу в качестве запасного, на случай проверить "это у меня с браузером или сетью что-то не то или мир сошел с ума?", Ослик ужасен, но самое ужасное в нем то, что людям больше и не надо, а то, что иногда надо на работе может и не работать адекватно больше нигде, чем особенно част грешат отечественные сайтописатели на казенной работе. а, в оом числе из-за цифровых подписей, безопасности и прочей хитромути. Сафари не нужен за пределами своего гетто. А вот яндексбраузеры и проч, если не считать шизанутости распространителей не так уж плохи внутри, потому что тот же движок,ч о и у хрома. У меня друг где-то с полгода в качестве эксперимента юзал яндекс-браузер, все нормально было, но когда эксперимент закончился, продолжать он не стал. Ну да ты все это и так знаешь. По сути сейчас или хром или ФФ, а все остальное - для желающих странного.

GARRI писал(а):С какой версии пользуешься? )

Вот плохо помню уже, то ли с 2.3-2.4, то ли с 3.4, потому что в целях экономии жалких мегабайт траффика ("о-ло-ло, 150 мегабайт, куда тебе столько, мажор-мажор, 100 достаточно, люди вон вообще с 50 живут и хватает!") юзал Оперу, а ФФ был запасным, на всякий случай.
ChainRainbow
Преобразовать указатели на единорогов/пегасов/земнопони к указателям на void, сложить в массив указателей на void. Но точно не шаблоны, фу-фу-фу. Есть повышающие и понижающие преобразования как раз для этих целей, но сам точнее не расскажу, потому что и ими почти не пользовался.

Мы занимались по книге Павловской - если со Страуструпа мозг подходит к окну и плачет, то там в принципе понятно написано. Если найдёшь, почитай про преобразования. И про наследование в c++ отдельно и вдумчиво: у него свои гадости, которые я тоже уже не помню. Но они есть.
Thunderstorm
Thunderstorm писал(а):Преобразовать указатели на единорогов/пегасов/земнопони к указателям на void, сложить в массив указателей на void.

В C# нет void. И это теряет полиморфизм, если ты захочешь отдать команду "всем шиппаться!", но при том сохранить индивидуальные методы "летать", "колдовать" и "править" для отдельных рас.
NTFS
Это возможно. Делается как раз через преобразования - кажется, даже неявные - и как-то несложно, в книжке точно такой же пример был. Дома посмотрю.
Thunderstorm
Thunderstorm писал(а):Это возможно. Делается как раз через преобразования - кажется, даже неявные - и как-то несложно, в книжке точно такой же пример был. Дома посмотрю.


Конечно, можно писать ((Pony)obj)->doSome()
но если в obj находится дракон, то будет большой бум с падением всего.

А шаблоны как раз такого позволяют избежать.
NTFS
Вооо, вот оно, виртуальные методы!
Объявляешь doSome() виртуальным, и вне зависимости от типа указателя он сделает то, чем фактически является obj. Типа

Код: Выделить всё
Creature** publicHouseVisitors = new Creature* [2];
publicHouseVisitors[0] = new Pony();
publicHouseVisitors[1] = new Dragon();

publicHouseVisitors[0]->clop();
publicHouseVisitors[1]->clop();

publicHouseVisitors[0]->yiff(publicHouseVisitors[1]);
publicHouseVisitors[1]->yiff(publicHouseVisitors[0]);



Где пони и дракон - потомки класса Creature.
Thunderstorm
NTFS писал(а):И под криптосистемы

ВотЪ!
NTFS писал(а):(автоопределение)Память у него сильно течет, но я просто взял за правило раз в 3-4 часа перезапускать броузер и это помогает.

"Та же фигня Джульетта"
)
GARRI
Filael писал(а):так грустно... такое чувство будто я один совершенно один и никому не нужен. даже на том свете меня никто бы не пришел с цветами встречать...


Добро пожаловать в мир интроверта! Хотя не только интроверта, по моему 90% человек такие. Ну, незнаю, посмотри "Эту замечательную жизнь", может полегчает.
сапсанка
NTFS писал(а):Что использовать-то? Ну ладно, я сижу на Firefox, потому что там есть необходимые мне в работе дополнения - но они нужны очень узкому кругу, страшно далекому от народа.
Остаётся Опера (коммерческий), ИЕ (ужасен) и Сафари (на Windows ужасен,а Мак для мажоров). Про всякие Яндекс-броузеры не будем к ночи.


Огниласа - браузер для нормальных пацанов! *взял из кулька семки и сплюнул скорлупки от прожёванных* Хром - для быдла. Опера - для педиков. Эксплолер - для аутистов. А про разного рода Амиго с Яндексами и вовсе молчу, это для шизофреников и с дереализацией, наверное.
destrier
Thunderstorm писал(а):Вооо, вот оно, виртуальные методы!
Объявляешь doSome() виртуальным, и вне зависимости от типа указателя он сделает то, чем фактически является obj.

Это хорошо в учебнике, но проблемы возникают уже при попытке передать массив потомков в метод, который принимает массив предков.

Вот сишный вариант
Спойлер


А вот вариант C#

Спойлер


Вроде бы почти одинаково, но в варианте на С++ таким образом легко передать и объект вообще без пони - компилятор сожрет преобразование.
А в C#, задав обобщенный тип и ограничения к нему - работает безопасно.
В ObjectPascal же вообще компилятор разрешал использовать потомков везде, где указан предок - вот жаль, там шаблонов не было :=(
NTFS
Tammy писал(а):
Filael писал(а):так грустно... такое чувство будто я один совершенно один и никому не нужен. даже на том свете меня никто бы не пришел с цветами встречать...


Нужно взращивать свой внутренний свет.


А что есть внутренний свет?
destrier
NTFS писал(а):
Код: Выделить всё
class Pony {
public:
   void clop() {
   }
} ;

На месте конпелятора я бы поглядел с малороссийским удивлением и губами "Пр-р-р!" сделал, потому что у пегасов есть метод clop() и от пони, и от пегаса, и непонятно, какой из них вызывать. Попробуй так:
Код: Выделить всё
class Pony {
public:
   virtual void clop() {
   }
} ;


https://ru.wikipedia.org/wiki/%D0%92%D0 ... %BE%D0%B4#Пример_виртуальной_функции_на_C++
Вот похожий случай с волком.
Thunderstorm
Да, это ошибка - писал на скорую руку, но не суть важно.
Соль моей проблемы именно в агрегировании потомков в общем массиве предков, и передаче массива потомков в функцию, ожидающую массив предков.. И вот тут я понимаю, что С++ не понимаю.
Впрочем, зачет уже сдал, а профессиональный софт я все равно пишу на Delphi и последние годы еще и на C#.
NTFS
Всех с праздником-Имболк...! Кельтский праздник свечей и топлёного молока... И славянский -Грозовник... В общем,переход к весне,пони\брони...!*хихикая,макает кончик хвоста Тамму в чашку с топлёным молоком*...
Радужный Вихрь
сапсанка писал(а):Добро пожаловать в мир интроверта!

Во-о-он! Все вон из моего мира! ))
ChainRainbow