История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Оснащения врачебно-сестринской бригады.
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
2017-12-21 | 250 |
5.00
из
|
Заказать работу |
|
|
Код С++ Простое наследование
class A { }; class B: public A //класс B наследуется из класса A { }; A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B voidmain() { return; } |
В приведенном коде созданы два класса, так как сами по себе классы это пустые идеи, то я посчитал нужным объявить объекты. Здесь каждый объект соответствует своему классу и является воплощением идей во что-то реально существующее. Дальше была объявлена главная функция программы. Вот когда я объявил объекты obj1,obj2 – они стали ждать когда я к ним обращусь.
Код С++ Простое наследование В класс потомок передаются данные из Класса-родителя
#include <conio.h> #include <iostream.h> class A { int x; //x является элементом класса A и доступен только внутри своего класса public: voidget_x(int); //Прототип функции, через которую в вышеобъявленный x присваивается значение voidshow_x(); //Прототип функции, выводящей x на экран }; class B: public A //класс B наследуется из класса A { }; //Определяю функции из класса вне своего класса. void A::get_x(int X) { x=X; //x и X различны.т.к. регистр разный. x- элемент класса, в X принимается параметр return; } void A::show_x() { cout<<x<<endl; //Вывод x на экран } A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B voidmain() { clrscr(); intvalue=10; //value будет передаваться в функцию в качестве параметра obj1.get_x(value); //Эстафета по классу A: value->X X->x obj1.show_x(); //x из Класса A выводится на экран //свойства и функциональность родительского класса заимствуются новым классом value=20; obj2.get_x(value); //Эстафетапоклассу B: value->X X->x obj2.show_x(); //x из класса B выводится на экран у getch(); return; } |
В приведенном коде описывается базовый класс A, на основе этого класса описывается второй класс, класс B. Класс A играет роль фундамента и передает все свои тайны своему наследнику.
Внутри класса A объявлен один скрытый элемент x. Этот элемент x объявлен в разделе private класса A (private прописывать не обязательно, так как это доступ по умолчанию). Таким образом, чтобы обратиться к этому x вне класса A нужно использовать посредника, в роли такого посредника выступит метод get_x(int) из класса A Для работы с этим x было объявлено две функции, в одну функцию передается какой-то параметр извне, а внутри этой функции этот параметр записывается в x. Вторая функция выводит этот самый x на экран.
|
Далее в коде использован прием наследования, и несмотря на то, что внутри класса B ничего не написано, про класс B смело можно сказать то же самое, что только что было описано про класс A. Таким образом базовый класс передал своему наследнику всё что в нем есть, поэтому с объектом B можно обращаться как с объектом типа A.
Коротко так: Если внутри потомка ничего не написано, то Потомок=Родитель
Смысл наследования в том, что потомок = Родитель плюс В потомке есть всё что есть у родителя, но у родителя не всё, что есть у потомка. Родитель щедро делится всем, потомку нужно только наследство (классика жанра)
Код С++ Простое наследование В класс потомок передаются данные из Класса-родителя
#include <conio.h> #include <iostream.h> class A { int x; //x является элементом класса A и доступен только внутри своего класса public: voidget_x(int); //Прототип функции, через которую в вышеобъявленный x присваивается значение voidshow_x(); //Прототип функции, выводящей x на экран }; class B: public A //класс B наследуется из класса A { public: voidshow_hello() //В класс-наследник была добавлена функция вывода на экран Hello { cout<<"Hello"<<endl; } }; //Определяю функции из класса вне своего класса. void A::get_x(int X) { x=X; //x и X различны.т.к. регистр разный. x- элемент класса, в X принимается параметр return; } void A::show_x() { cout<<x<<endl; //Вывод x на экран } A obj1; //obj1 есть объект класса A B obj2; //obj2 есть объект класса B voidmain() { clrscr(); intvalue=10; //value будет передаваться в функцию в качестве параметра obj1.get_x(value); //Эстафета по классу A: value->X X->x obj1.show_x(); //x из Класса A выводится на экран //свойства и функциональность родительского класса заимствуются новым классом value=20; obj2.get_x(value); //Эстафетапоклассу B: value->X X->x obj2.show_x(); //x из класса B выводится на экран у // obj1.show_hello(); //Потомок родителю не дает ни копейки, так не выйдет obj2.show_hello(); //На экран выведется Hello. Это функция из класса B getch(); return; } |
Этот код очень похож на предыдущий, но внутри наследника дописана одна функция, чтобы было лучше видно, я описал её непосредственно внутри класса. В разделе public я ее описал, чтобы было можно к ней обратится напрямую без заморочек. Внутри потомка можно создать одноименную функцию с функцией из класса родителя, в таком случае происходит что-то вроде отказа от этой части наследства и такая функция становится самостоятельной функцией своего класса. Думаю это можно не демонстрировать, вы сами можете посмотреть поведение программы в такой ситуации.
Функцию которую я добавил я назвал новым именем и внутри нее написал код, выводящий на экран Hello. Таким образом, всё что справедливо для класса A стало справедливым для класса B, но не всё что справедливо для класса B справедливо для класса A
|
Хочу я этого или не хочу, но придется забежать немного вперед и сообщить важную часть информации. В первом случае был описан пустой класс B, но несмотря на то, что я написал: “он унаследовал все элементы из класса A“, об абсолютно полном унаследовании элементов в классы говорить в корне неправильно. На самом деле, во время первого обращения к каждому из объектов, произошел неявный вызов конструктора. Для каждого объекта вызывается исключительно свой конструктор и этот элемент никогда не наследуется. Так как конструкторы создаваемые по умолчанию одинаковые, то в описанном случае верно высказывание Класс А равен классу B, но при этом неверно Класс B унаследовал всё из класса A(имеется ввиду тот случай где в классе B внутри скобок пусто)
Подводим итоги:
Наследование – создание подкласса на основе уже существующего
Класс от которого произошло наследование называется базовым или родителем
Класс, который произошел от родителя называется производным классом или потомком
|
Наследование похоже на доведение чего-то готового до ума через добавление дополнительной функциональности
Конструкция наследования class Имя Класса Родителя: метод доступа Имя Класса Потомка{методы потомка};
При использовании наследования свойства и функциональность родительского класса заимствуются классом-потомком
В случае если в класс потомок добавлены какие-то элементы, то класс потомок не делится этим с родителем
При использовании в методах класса-потомка, одноименного метода с методом класса-родителя происходит что-то вроде отказа от этой части наследования и такой метод воспринимается классом потомком как самостоятельный и свой собственный метод
Несмотря на то, что класс потомок может быть равен классу-родителю, Нет и не может быть такого случая когда можно сказать, что класс потомок унаследовал абсолютно всё от класса родителя (прим. В контексте этого вывода: Для работы с классом обязателен объект)
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!