рекламная строчка Nolix

суббота, 30 января 2016 г.

Украинские националисты провели факельное шествие в Харькове

Видео факельного шествия в Харькове в память студентов, давших бой большевикам в 1918 году на станции Круты близ Киева.

Ответ москвича украинцу по поводу ситуации в России

вторник, 19 января 2016 г.

О наследовании для начинающих программистов

  В этом посте приведен простой пример на языке с++, который помогает помять, что такое наследование. Здесь определены два класса - A и B, которые находятся в отношении наследования: класс B является дочерним по отношению к классу A.
  Поле данных в базовом (иначе говоря, родительском) классе только одно - это переменная целого типа a. В классе B вроде бы присутствует только одно поле данных - int b. Однако как раз суть наследования именно в том и заключается, что все члены базового класса являются также и членами дочернего класса. То есть int a является также и членом класса B. Членами класса B являются два одноименных метода Print(). Если метод Print() вызывается для объекта класса B, то по умолчанию подразумевается, что вызывается "родной" для класса B Print().
В противном случае используется оператор разрешения области видимости "::"



using namespace std;

class A
{
 protected:
int a;
 public:
A(int x){  a = x; }                         // конструктор
void Print() { cout << a << endl;};  // функция - член класса (выводит a)

class B: public A
{
int b;
public:
B() : A(15)     // так как a является членом класса B, то необходимо
{                    // 
проинициализировать путем вызова
b = 20;      // конструктора класса A с параметром типа int
}
B(int y) : A(15)
{
b = y;
}
B(int x, int y) : A(x), b(y)  // с помощью этого конструктора можно                                      
{                                      // проинициализировать  a и через параметры
}

void Print()

      {
A::Print();   // вызов функции Print() из класса A
std::cout << b << endl;
}
};

void main()
{
B obj(40, 50);
obj.Print();      // вызов функции Print() из класса B
obj.A::Print();  // вызов функции Print() из класса A
}


Рисование мышью в консоли

воскресенье, 17 января 2016 г.

Несколько курьезных фото

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









Источник: fishki.net

суббота, 16 января 2016 г.

Рисование мышкой в консоли (с++)

Оказывается, в консоли можно сотворить даже что-то типа графического редактора paint. Ниже показан код, как это делается. И добавлены некоторые комментариями.


using namespace std;

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE),
hIn = GetStdHandle(STD_INPUT_HANDLE);

void main()
{
CONSOLE_CURSOR_INFO cinfo = {100, false};
SetConsoleCursorInfo(hOut, &cinfo);//скрыли курсор
COORD c = { 0, 0 };
DWORD d;
CONSOLE_SCREEN_BUFFER_INFO csbi;
INPUT_RECORD ir;
         // устанавливаем режим консоли
SetConsoleMode(hIn, ENABLE_MOUSE_INPUT | ENABLE_INSERT_MODE);
while (1)  // бесконечный цикл
{
while (ReadConsoleInput(hIn, &ir, 1, &d))  // считываем инфу из входного потока
{
if (ir.EventType == MOUSE_EVENT)   // если произошло некое событие с мышью
{
if (ir.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)  // если нажата левая кнопка мыши
{
 // курсор ставится в позицию, где кликнула мышь
         SetConsoleCursorPosition(hOut, ir.Event.MouseEvent.dwMousePosition);
cout << '*';   // при каждом клике левой кнопкой рисуется символ "звездочка"
}
                      // при нажатии правой кнопки мыши всё перекрашиваем в черный цвет (стираем)
else if (ir.Event.MouseEvent.dwButtonState==RIGHTMOST_BUTTON_PRESSED)
{
GetConsoleScreenBufferInfo(hOut, &csbi);
FillConsoleOutputAttribute(hOut, 0, csbi.dwSize.X*csbi.dwSize.Y, c, &d);
}
}
}
}
}
Рисование окон в консоли

среда, 13 января 2016 г.

Немного грустный анекдот

Увы, эта история может коснуться когда-то каждого. То ли анекдот, то ли быль:
Бабушка говорит подружке:
"Ты мне в одноклассники не пиши, я оттуда удалилась."
- А почему?
- Одноклассники закончились.

пятница, 1 января 2016 г.

Рисование окон в консоли на с++

Пытаясь разобраться с вопросом рисования окон в консоли на с++, я столкнулся с тем, что в Интернете об этом вовсе не много информации. А в примерах кода не хватает комментариев, чтобы быстро понять код.
Ниже приведен код программы на с++ с некоторыми комментариями, которая рисует два окна друг над другом.

//получить дескриптор окна консоли
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

// функция рисования окна, заглавие которого определяется параметром title
// верхний левый угол этого окна будет находиться по координатам x и y
// ширина окна - width, высота - height

void DrawWindow(char * title, int x, int y, int width, int height)
{
COORD c = { x, y };
DWORD d;
SetConsoleCursorPosition(hOut, c); //переставить курсор в координаты x, y
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | BACKGROUND_RED); // устанавливаем цвет - синий на красном фоне

// рисуем прямоугольник заданного выше цвета
for (int i = 0; i<= width; ++i)
{
if (i == width)
cout << 'X';
else if (i < strlen(title))
cout << title[i];
else
cout << ' ';
}
SetConsoleTextAttribute(hOut, 0);
for (int i = 1; i <= height; ++i)
{
c.X = x;
c.Y = y + i;
//заполнение цветом
FillConsoleOutputAttribute(hOut, 0xff, width + 1, c, &d);
//заполнение символом "пробел"
FillConsoleOutputCharacter(hOut, ' ', width + 1, c, &d);
c.X = x + width + 1;
SetConsoleCursorPosition(hOut, c);
cout << ' ';
}
c.X = x + 1;
c.Y = y + height + 1;
FillConsoleOutputAttribute(hOut, 0, width + 1, c, &d);
//заполняет символом
FillConsoleOutputCharacter(hOut, ' ', width + 1, c, &d);

}

void main()
{
COORD c = { 0, 0 };
DWORD d;
// Информация о курсоре
CONSOLE_CURSOR_INFO ci = { 100, false };
SetConsoleCursorInfo(hOut, &ci);
//Информация об окне консоли будет храниться в структуре csbi
CONSOLE_SCREEN_BUFFER_INFO csbi;
//получаем информацию об заданном экранном буфере консоли
GetConsoleScreenBufferInfo(hOut, &csbi);
//заполняет цветом
// цвет определяется шестнадцатиричным числом - в данном случае 00 означает черный цвет
FillConsoleOutputAttribute(hOut, 0x00, csbi.dwSize.X*csbi.dwSize.Y, c, &d);
// заполняет символом "пробел"
FillConsoleOutputCharacter(hOut, ' ', csbi.dwSize.X*csbi.dwSize.Y, c, &d);
// рисуем окно с координатами левого верхнего угла 3, 3
DrawWindow("MyWindow", 4, 4, 20, 5);
// рисуем окно с координатами левого верхнего угла 6, 6
DrawWindow("MyWindow", 7, 7, 20, 5);
_getch();
}

Рисование мышкой в консоли с++