Мегаобучалка Главная | О нас | Обратная связь


Задание 2 – ознакомление с наследованием и виртуальными функциями



2016-01-02 284 Обсуждений (0)
Задание 2 – ознакомление с наследованием и виртуальными функциями 0.00 из 5.00 0 оценок




Отчет по лабораторной работе №1

По дисциплине «Современные информационные технологии»

 

Студент: Колесников А.В.

Группа: СМ5-18

Руководитель: Силин С.И.

 

 

Москва 2015 г.

Задание №1 – ознакомление с областями public, protected, private

1) Скопмилируйте проект, набрав в консоли mingw32-make clean, затем mingw32-make

2) Запустите task1.exe и ознакомьтесь с последовательностью выводимых сообщений

3) Наберите в консоли "./test1.exe > log.txt" и нажмите Enter. При этом все сообщения сохранятся в файл log.txt

4) Объясните порядок вызова сообщений и последовательность действий

5) Выполните действия, отмеченные (*5*) в тексте программы. Объясните наблюдаемый эффект

6) Выполните действия, отмеченные (*6*) в тексте программы. Объясните наблюдаемый эффект

 

/***************************** Примечание. std::cout << используется для вывода текста в консоль. Все что указывается после << будет выведено на экран Вывод можно объединять в цепочку   std::cout << "Сегодня " << 19 " << " ноября " << 2015 << " года".   Будет выведено: "Сегодня 19 ноября 2015 года".   std::endl является служебной командой, которая используется для переноса строки при выводе на экран. Она не обязательно должна идти последней в списке команд.   std::cout << 25 << std::endl << 36 << std::endl;   Будет выведено: "25 " *****************************/ #include <iostream>   class base_class { private: void base_private_function() { std::cout << "Приватная функция базового класса" << std::endl; }   protected: void base_protected_function() { std::cout << "Защищенная функция базового класса" << std::endl;   base_private_function(); }   public: base_class() { std::cout << "Конструктор базового класса" << std::endl; }   ~base_class() { std::cout << "Деструктор базового класса" << std::endl; }   void base_public_function_1() { std::cout << "Публичная функция базового класса номер 1" << std::endl; base_protected_function(); base_private_function(); }   void base_public_function_2() { std::cout << "Публичная функция базового класса номер 2" << std::endl; base_protected_function(); base_private_function(); }   virtual void virtualized_public_function() { std::cout << "Виртуальная публичная функция базового класса" << std::endl; base_protected_function(); base_private_function(); }   };   int main() { std::cout << "Старт програмы" << std::endl;   std::cout << "Объявляем переменную типа базовый класс с именем base" << std::endl; base_class base;   std::cout << "Объявляем указатель на переменную типа базовый класс" << std::endl; base_class *base_pointer;   std::cout << "Получаем адрес переменной base и кладем значение в указатель" << std::endl; base_pointer = &base;   std::cout << "Пытаемся вызвать виртуальную функцию через саму переменную" << std::endl; base.virtualized_public_function();   std::cout << "Пытаемся вызвать виртуальную функцию через саму переменную" << std::endl; base.virtualized_public_function();   std::cout << "Пытаемся вызвать публичную функцию 1 через саму переменную" << std::endl; base.base_public_function_1();   std::cout << "Пытаемся вызвать публичную функцию 2 через саму переменную" << std::endl; base.base_public_function_2();   std::cout << "Пытаемся вызвать виртуальную функцию через указатель" << std::endl; base_pointer->virtualized_public_function();   std::cout << "Пытаемся вызвать публичную функцию 1 через указатель" << std::endl; base_pointer->base_public_function_1();   std::cout << "Пытаемся вызвать публичную функцию 2 через указатель" << std::endl; base_pointer->base_public_function_2();   //std::cout << "Пытаемся получить доступ к защищенной функции извне класса. Для этого уберите // в следующей строке" << std::endl; //base.base_protected_function();   //std::cout << "Пытаемся получить доступ к приватной функции извне класса. Для этого уберите // в следующей строке и верните // в предыдущей операции."<< std::endl; // base.base_private_function();   return 0; }

 

Задание 2 – ознакомление с наследованием и виртуальными функциями

1) Расставьте std::cout таким образом, чтобы установить, в каком порядке и какие функции будут вызваны из программы

2) Скопмилируйте проект, набрав в консоли mingw32-make

3) Запустите test2.exe и ознакомьтесь с последовательностью выводимых сообщений

4) Объясните порядок вызова сообщений и последовательность действий

6) Выполните действия, отмеченные (*6*) в тексте программы. Объясните наблюдаемый эффект

7) Выполните действия, отмеченные (*7*) в тексте программы. Объясните наблюдаемый эффект

/*****************************   Примечание. std::cout << используется для вывода текста в консоль. Все что указывается после << будет выведено на экран Вывод можно объединять в цепочку   std::cout << "Сегодня " << "19 " << " ноября " << 2015 << " года."   Будет выведено: "Сегодня 19 ноября 2015 года".   std::endl является служебной командой, которая используется для переноса строки при выводе на экран. Она не обязательно должна идти последней в списке команд.   std::cout << 25 << std::endl << 36 << std::endl;   Будет выведено: "25 "   *****************************/ #include <iostream> class base_class { private: void base_private_function() { std::cout << "Приватная функция базового класса" << std::endl; }   protected: void base_protected_function() { std::cout << "Защищенная функция базового класса" << std::endl;   base_private_function(); }   public: base_class() { std::cout << "Конструктор базового класса" << std::endl; }   ~base_class() { std::cout << "Деструктор базового класса" << std::endl; }   void base_public_function_1() { std::cout << "Публичная функция базового класса номер 1" << std::endl; base_protected_function(); base_private_function(); }   void base_public_function_2() { std::cout << "Публичная функция базового класса номер 2" << std::endl; base_protected_function(); base_private_function(); }   virtual void virtualized_public_function() { std::cout << "Виртуальная публичная функция базового класса" << std::endl; base_protected_function(); base_private_function(); }   };   // Это класс наследник от base class derived_class: public base_class { private: void derived_private_function() { }   protected: void derived_protected_function() { derived_private_function(); }   public: derived_class() { }   ~derived_class() { }   void base_public_function_1() { std::cout << "Публичная функция производного класса с тем же именем, что и у базового" << std::endl; derived_protected_function(); }   void derived_public_function_2() { std::cout << "Публичная функция производного класса номер 2" << std::endl; base_protected_function(); //(*7*) ОШИБКА пытаемся обратиться в классе наследника к приватной функции базового класса // derived_pointer->base_private_function(); }   void virtualized_public_function() { derived_protected_function(); } };   int main() { std::cout << "создаем переменную типа базовый класс" << std::endl; base_class base;   std::cout << "создаем указатель на переменную типа базовый класс" << std::endl; base_class *base_pointer;   std::cout << "создаем переменную типа derived_class" << std::endl; derived_class derived;   std::cout << "создаем указатель на переменную типа derived_class" << std::endl; derived_class *derived_pointer;   std::cout << "Получаем адрес переменной derived и кладем значение в указатель" << std::endl; derived_pointer = &derived;   std::cout << "Присваиваем указателю на базовый класс указатель на производный от него" << std::endl; base_pointer = &derived;   // Так как с обращением к функциям класса через переменную мы уже ознакомились // то теперь сосредоточимся на различиях при обращении через разные указатели std::cout << "вызываем функцию базового класса через указатель на него" << std::endl; base_pointer->base_public_function_1();   std::cout << "вызываем стандартную функцию базового класса (также являющейся функцией класса наследника)через указатель на производный класс" << std::endl; derived_pointer->base_public_function_1();   std::cout << "вызываем функцию базового класса через указатель на производный класс" << std::endl; derived_pointer->base_class::base_public_function_1();   //(*6*) ошибка - пытаемся обратиться через базовый класс к функции производного //base_pointer->derived_public_function_2(); derived_pointer->derived_public_function_2();   base_pointer->virtualized_public_function(); derived_pointer->virtualized_public_function();   base_pointer->base_class::virtualized_public_function(); derived_pointer->base_class::virtualized_public_function();   return 0; }

 



2016-01-02 284 Обсуждений (0)
Задание 2 – ознакомление с наследованием и виртуальными функциями 0.00 из 5.00 0 оценок









Обсуждение в статье: Задание 2 – ознакомление с наследованием и виртуальными функциями

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (284)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)