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

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

Жанры

Программирование. Принципы и практика использования 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). Значение, позволяющее найти объект в памяти компьютера.

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

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

Командир Красной Армии

Поселягин Владимир Геннадьевич
1. Командир Красной Армии
Фантастика:
попаданцы
8.72
рейтинг книги
Командир Красной Армии

Брачный сезон. Сирота

Свободина Виктория
Любовные романы:
любовно-фантастические романы
7.89
рейтинг книги
Брачный сезон. Сирота

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Барону наплевать на правила

Ренгач Евгений
7. Закон сильного
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барону наплевать на правила

Единственная для невольника

Новикова Татьяна О.
Любовные романы:
любовно-фантастические романы
5.67
рейтинг книги
Единственная для невольника

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Любовь по инструкции

Zzika Nata
Любовные романы:
любовно-фантастические романы
5.85
рейтинг книги
Любовь по инструкции

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Мастер Разума II

Кронос Александр
2. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Мастер Разума II

Сердце Дракона. Том 9

Клеванский Кирилл Сергеевич
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Сердце Дракона. Том 9

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное