Владимир Волков - Программирование для карманных компьютеров

Тут можно читать онлайн Владимир Волков - Программирование для карманных компьютеров - бесплатно ознакомительный отрывок. Жанр: comp-programming. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование для карманных компьютеров
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Владимир Волков - Программирование для карманных компьютеров краткое содержание

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

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

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

Программирование для карманных компьютеров - читать онлайн бесплатно ознакомительный отрывок

Программирование для карманных компьютеров - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Владимир Волков
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Обработчики кнопок Assign и Call обращаются соответственно к полю Age и методу Speak() созданного объекта MyDog. Кнопка Destroy уничтожает объект, возвращая выделенную память операционной системе. После уничтожения объекта обращение к его полю и методу вызывает ошибку. Во время уничтожения объекта вызывается его метод ~Dog(), который является деструктором класса. В этом методе можно выполнить дополнительные действия, например освобождение захваченной конструктором памяти.

Разработчик может объявить несколько объектных переменных типа Dog, вызвать для каждой из них конструктор и создать несколько объектов типа Dog. Каждый из объектов далее может вести независимую жизнь. Таким образом, можно считать, что класс – это шаблон, по которому создаются объекты. А объект – это структура, для которой выделена память при помощи совместного действия оператора new и конструктора класса.

Наследование

Наследуя функциональность существующего родительского класса (который носит название «базовый класс»), разработчик получает для дочернего класса все свойства и методы родителя. Их даже не надо объявлять и реализовывать.

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

Упражнение 5.1 (продолжение)

11. В файле DogClass.h нужно дописать в конец файла объявление еще одного класса CleverDog. Этот класс имитирует поведение собаки, которая не только знает свой возраст и умеет говорить, но еще и умеет складывать и умножать целые числа. Объявление соответствующего класса приведено в листинге 5.4.

Листинг 5.4

class CleverDog: public Dog {

public:

void Add(int x, int y){

int i = x+y;

char mm[32];

wchar_t *szStr = L"";

wchar_t mstr[32];

sprintf(mm,"Результат сложения: %d\n", i);

mbstowcs(mstr, mm, 32);

szStr = mstr;

MessageBox(NULL, szStr, TEXT(«TUT»), 0);

};

void Mult(int x, int y){

int i = x*y;

char mm[32];

wchar_t *szStr = L"";

wchar_t mstr[32];

sprintf(mm,"Результат умножения: %d\n", i);

mbstowcs(mstr, mm, 32);

szStr = mstr;

MessageBox(NULL, szStr, TEXT(«TUT»), 0);

};

};

12. В файле OOP1.cpp нужно заменить объявление Dog *MyDog; на объявление переменной CleverDog *MyDog;.

13. Нужно изменить вызов конструктора при щелчке на кнопке Create, как это показано в листинге 5.5.

Листинг 5.5

case IDC_BUTTON1:

MyDog = new CleverDog();

break;

14. Теперь нужно запустить программу и последовательно нажать кнопки Create, Assign, Call и Destroy. Легко заметить, что поведение программы не изменилось, хотя в классе CleverDog не объявлено поле Age и метод Speak(). Они наследуются от класса Dog. Факт наследования определяется при объявлении класса:

class CleverDog: public Dog { …

15. Добавить вызов новых методов к обработчику нажатия кнопки Call, как показано в листинге 5.6. Листинг 5.6

case IDC_BUTTON4:

MyDog->Speak();

MyDog->Add(10, 20);

MyDog->Mult(6, 7);

break;

16. Скомпилировать и запустить проект. Последовательное нажатие кнопок Create, Assign, Call и Destroy показывает, что вызов унаследованных и добавленных методов происходит одинаково успешно.

В классе CleverDog можно объявить конструктор и деструктор. В этом случае вызов конструкторов и деструкторов будет происходить в следующем порядке:

При создании:

? вызов конструктора Dog.

? вызов конструктора CleverDog.

При уничтожении:

? вызов деструктора CleverDog.

? вызов деструктора Dog.

Независимо от количества ступеней наследования при вызове конструкторов всегда действует правило «Последовательно вызываются конструкторы от базового класса, лежащего в основе иерархии, до текущего класса», а при вызове деструкторов все происходит в обратном порядке, сначала вызывается деструктор текущего класса, затем его базового класса и далее до класса, лежащего в основе иерархии.

Полиморфизм

Полиморфизм является способностью разных объектов выполнять одни и те же команды, но при этом каждый объект может поддерживать свой метод реализации полученной команды. Следующее упражнение проиллюстрирует применение полиморфизма в eVC.

Упражнение 5.1 (продолжение)

17. Добавить в файл DogClass.h еще один класс, как показано в листинге 5.7. Добавленный класс полностью идентичен классу CleverDog, за тем исключением, что новая собака путает сложение и умножение.

Листинг 5.7

class StupidDog: public Dog {

public:

void Add(int x, int y){

int i = x*y;

char mm[32];

wchar_t *szStr = L"";

wchar_t mstr[32];

sprintf(mm,"Результат сложения: %d\n", i);

mbstowcs(mstr, mm, 32);

szStr = mstr;

MessageBox(NULL, szStr, TEXT(«TUT»), 0);

};

void Mult(int x, int y){

int i = x+y;

char mm[32];

wchar_t *szStr = L"";

wchar_t mstr[32];

sprintf(mm,"Результат умножения: %d\n", i);

mbstowcs(mstr, mm, 32);

szStr = mstr;

MessageBox(NULL, szStr, TEXT(«TUT»), 0);

};

};

18. В конец класса Dog нужно дописать два новых объявления, как показано в листинге 5.8. Листинг 5.8

virtual void Add(int x, int y) = 0;

virtual void Mult(int x, int y) = 0;

19. В файле OOP1.cpp нужно заменить объявление переменных типа CleverDog объявлением массива объектных переменных типа Dog, как это показано в листинге 5.9. Листинг 5.9

// Global Variables:

HINSTANCE g_hInst;

HWND g_hwndCB;

Dog *Dogs[4];

20. Изменить код обработчиков нажатий кнопок, как показано в листинге 5.10. Листинг 5.10

int i;

case IDC_BUTTON1:

Dogs[0] = new CleverDog();

Dogs[1] = new StupidDog();

Dogs[2] = new CleverDog();

Dogs[3] = new StupidDog();

break;

case IDC_BUTTON2:

for(i = 0; i<4; i++) {

delete Dogs[i];

Dogs[i] = NULL;

}

break;

case IDC_BUTTON3:

Dogs[0]->age = 200;

break;

case IDC_BUTTON4:

for(i = 0; i<4; i++)

Dogs[i]->Mult(20, 10);

break;

21. Скомпилировать и запустить программу. Для проверки работы нужно последовательно нажать кнопки Create, Call и Destroy. После нажатия кнопки Call вы должны получить два сообщения с правильным ответом 200 и два сообщения с неправильным ответом 30.

В классах CleverDog и StupidDog есть методы с одинаковыми именами и сигнатурами. Правда, реализация этих методов отличается, так как объект StupidDog путает умножение и сложение.

Язык C++ позволяет производить «тихое» приведение типа объекта к типу базового класса. Именно это сделало возможным поместить все объекты CleverDog и StupidDog в один массив объектов типа Dog. Но изначально в классе Dog не было методов Add и Mult, и вызвать их инструкцией Dogs[i]->Mult() было невозможно. Чтобы исправить этот досадный недостаток, в классе Dog эти методы были объявлены. Но реализация этих методов отсутствует, так как она нужна только дочерним классам. Такие методы без реализации называются абстрактными методами, и класс, в котором есть хотя бы один абстрактный метод, тоже становится абстрактным. Абстрактный класс не может порождать объекты, зато он может гарантировать полиморфное поведение своих наследников. Чтобы при вызове в таком полиморфном стиле объект знал «свой» метод, метод должен быть объявлен как virtual (виртуальный), что и было сделано в рассматриваемом примере. Виртуальный метод сохраняет свою виртуальность далее по всей иерархии наследования.

Инкапсуляция

Поскольку принцип инкапсулирования говорит нам о сокрытии от внешнего мира деталей реализации класса (объекта) и о его независимом поведении, то в языке программирования для достижения этих целей должны существовать определенные технологии.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Владимир Волков читать все книги автора по порядку

Владимир Волков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование для карманных компьютеров отзывы


Отзывы читателей о книге Программирование для карманных компьютеров, автор: Владимир Волков. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x