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

на главную

Жанры

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

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

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

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

Рокотов Алексей
3. Вечный
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга III

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Темный Патриарх Светлого Рода 5

Лисицин Евгений
5. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 5

Иван Московский. Том 5. Злой лев

Ланцов Михаил Алексеевич
5. Иван Московский
Фантастика:
попаданцы
альтернативная история
6.20
рейтинг книги
Иван Московский. Том 5. Злой лев

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Хозяйка старой усадьбы

Скор Элен
Любовные романы:
любовно-фантастические романы
8.07
рейтинг книги
Хозяйка старой усадьбы

Назад в СССР: 1985 Книга 4

Гаусс Максим
4. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Назад в СССР: 1985 Книга 4

Лорд Системы 8

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