Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

void mv;

void cd;

void ad;

static void cb_sh(Address, Address addr) // обратные вызовы

{ reference_to<W7>(addr).sh; }

static void cb_mv(Address, Address addr)

{ reference_to<W7>(addr).mv; }

static void cb_cd(Address, Address addr)

{ reference_to<W7>(addr).cd; }

static void cb_ad(Address, Address addr)

{ reference_to<W7>(addr).ad; }

};

Однако

объект класса
W7
(эксперимент с объектом класса
Window
номер
7
) на самом деле содержит шесть кнопок: просто две из них он скрывает.

W7::W7(int w, int h, const string& t)

:Window(w,h,t),

sh_left(true),mv_left(true),cd_left(true),ad_left(true)

{

p1 = new Button(Point(100,100),50,20,"show",cb_sh);

p2 = new Button(Point(200,100),50,20,"hide",cb_sh);

mvp = new Button(Point(100,200),50,20,"move",cb_mv);

cdp = new Button(Point(100,300),50,20,"create",cb_cd);

adp1 = new Button(Point(100,400),50,20,"activate",cb_ad);

adp2 = new Button(Point(200,400),80,20,"deactivate",cb_ad);

attach(*p1);

attach(*p2);

attach(*mvp);

attach(*cdp);

p2–>hide;

attach(*adp1);

}

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

voidW7::sh // скрывает кнопку, показывает следующую

{

if (sh_left) {

p1–>hide;

p2–>show;

}

else {

p1–>show;

p2–>hide;

}

sh_left = !sh_left;

}

void W7::mv // перемещает кнопку

{

if (mv_left) {

mvp–>move(100,0);

}

else {

mvp–>move(–100,0);

}

mv_left = !mv_left;

}

void W7::cd // удаляет кнопку и создает новую

{

cdp–>hide;

delete cdp;

string lab = "create";

int x = 100;

if (cd_left) {

lab = "delete";

x = 200;

}

cdp = new Button(Point(x,300), 50, 20, lab, cb_cd);

attach(*cdp);

cd_left = !cd_left;

}

void W7::ad //
отсоединяет кнопку от окна и

// устанавливает связь с ее заменой

{

if (ad_left) {

detach(*adp1);

attach(*adp2);

}

else {

detach(*adp2);

attach(*adp1);

}

ad_left = !ad_left;

}

int main

{

W7 w(400,500,"move");

return gui_main;

}

Эта программа демонстрирует основные способы добавления и удаления элементов окна, которые проявляются в их исчезновении и появлении.

Глоссарий

“Часто точно выбранные слова стоят тысячи рисунков”.

Аноним

Глоссарий — это краткое объяснение слов, использованных в тексте. Ниже приведен относительно краткий словарь терминов, которые мы считаем наиболее важными, особенно на ранних этапах изучения программирования. Предметный указатель и раздел “Термины” в конце каждой главы также могут помочь читателям в этом. Более подробный и широкий словарь терминов, тесно связанных с языком С++, можно найти на веб-странице www.research.att.com/~bs/glossary.html. Кроме того, в веб существует невероятно много специализированных глоссариев (очень разного качества). Пожалуйста, имейте в виду, что термины могут иметь несколько разных значений (некоторые из них мы указываем), причем большинство перечисленных нами терминов в другом контексте могут иметь иной смысл; например, мы не определяем слово абстрактный (abstract) как прилагательное, относящееся к современной живописи, юридической практике или философии.

Абстрактный класс (abstract class). Класс, который невозможно непосредственно использовать для создания объектов; часто используется для определения интерфейсов производных классов. Класс является абстрактным, если содержит чисто виртуальную функцию или защищенный конструктор.

Абстракция (abstraction). Описание сущности, которая вольно или невольно игнорирует (скрывает) детали (например, детали реализации); селективное незнание.

Адрес (address). Значение, позволяющее найти объект в памяти компьютера.

Поделиться:
Популярные книги

Отморозки

Земляной Андрей Борисович
Фантастика:
научная фантастика
7.00
рейтинг книги
Отморозки

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V

Комендант некромантской общаги 2

Леденцовская Анна
2. Мир
Фантастика:
юмористическая фантастика
7.77
рейтинг книги
Комендант некромантской общаги 2

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Ведьмак. Назад в СССР

Подус Игорь
1. Ведьмак. Назад в СССР
Фантастика:
попаданцы
альтернативная история
6.60
рейтинг книги
Ведьмак. Назад в СССР

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Огромный. Злой. Зеленый

Новикова Татьяна О.
1. Большой. Зеленый... ОРК
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Огромный. Злой. Зеленый

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы