Классы, простое наследование первое знакомство

Точно также как я начинал свой блог с пустой программы, имеет смысл описать пустое наследование. Минимум кода позволит уяснить нужные моменты
Код С++ Простое наследование

В приведенном коде созданы два класса, так как сами по себе классы это пустые идеи, то я посчитал нужным объявить объекты. Здесь каждый объект соответствует своему классу и является воплощением идей во что-то реально существующее. Дальше была объявлена главная функция программы. Вот когда я объявил объекты obj1,obj2 — они стали ждать когда я к ним обращусь.

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

Незнание любого из этих материалов может привести только к потраченному зря времени

Код С++ Простое наследование В класс потомок передаются данные из Класса-родителя

В приведенном коде описывается базовый класс A, на основе этого класса описывается второй класс, класс B. Класс A играет роль фундамента и передает все свои тайны своему наследнику.
Внутри класса A объявлен один скрытый элемент x. Этот элемент x объявлен в разделе private класса A (private прописывать не обязательно, так как это доступ по умолчанию). Таким образом, чтобы обратиться к этому x вне класса A нужно использовать посредника, в роли такого посредника выступит метод get_x(int) из класса A Для работы с этим x было объявлено две функции, в одну функцию передается какой-то параметр извне, а внутри этой функции этот параметр записывается в x. Вторая функция выводит этот самый x на экран.

Далее в коде использован прием наследования, и несмотря на то, что внутри класса B ничего не написано, про класс B смело можно сказать то же самое, что только что было описано про класс A. Таким образом базовый класс передал своему наследнику всё что в нем есть, поэтому с объектом B можно обращаться как с объектом типа A.

Коротко так: Если внутри потомка ничего не написано, то Потомок=Родитель

Смысл наследования в том, что потомок = Родитель плюс В потомке есть всё что есть у родителя, но у родителя не всё, что есть у потомка. Родитель щедро делится всем, потомку нужно только наследство (классика жанра)

Код С++ Простое наследование В класс потомок передаются данные из Класса-родителя

Этот код очень похож на предыдущий, но внутри наследника дописана одна функция, чтобы было лучше видно, я описал её непосредственно внутри класса. В разделе public я ее описал, чтобы было можно к ней обратится напрямую без заморочек. Внутри потомка можно создать одноименную функцию с функцией из класса родителя, в таком случае происходит что-то вроде отказа от этой части наследства и такая функция становится самостоятельной функцией своего класса. Думаю это можно не демонстрировать, вы сами можете посмотреть поведение программы в такой ситуации.
Функцию которую я добавил я назвал новым именем и внутри нее написал код, выводящий на экран Hello. Таким образом, всё что справедливо для класса A стало справедливым для класса B, но не всё что справедливо для класса B справедливо для класса A

Хочу я этого или не хочу, но придется забежать немного вперед и сообщить важную часть информации. В первом случае был описан пустой класс B, но несмотря на то, что я написал: «он унаследовал все элементы из класса A«, об абсолютно полном унаследовании элементов в классы говорить в корне неправильно. На самом деле, во время первого обращения к каждому из объектов, произошел неявный вызов конструктора. Для каждого объекта вызывается исключительно свой конструктор и этот элемент никогда не наследуется. Так как конструкторы создаваемые по умолчанию одинаковые, то в описанном случае верно высказывание Класс А равен классу B, но при этом неверно Класс B унаследовал всё из класса A (имеется ввиду тот случай где в классе B внутри скобок пусто)

Подводим итоги:

  • Наследование — создание подкласса на основе уже существующего
  • Класс от которого произошло наследование называется базовым или родителем
  • Класс, который произошел от родителя называется производным классом или потомком
  • Наследование похоже на доведение чего-то готового до ума через добавление дополнительной функциональности
  • Конструкция наследования
    class ИмяКлассаПотомка: метод доступа ИмяКлассаРодителя {методы потомка};
  • При использовании наследования свойства и функциональность родительского класса заимствуются классом-потомком
  • В случае если в класс потомок добавлены какие-то элементы, то класс потомок не делится этим с родителем
  • При использовании в методах класса-потомка , одноименного метода с методом класса-родителя происходит что-то вроде отказа от этой части наследования и такой метод воспринимается классом потомком как самостоятельный и свой собственный метод
  • Несмотря на то, что класс потомок может быть равен классу-родителю, Нет и не может быть такого случая когда можно сказать, что класс потомок унаследовал абсолютно всё от класса родителя (прим. В контексте этого вывода: Для работы с классом обязателен объект)


Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

3 комментария: Классы, простое наследование первое знакомство

  • Anonymous говорит:

    Спасибо, все очень понятно!

  • Сергей говорит:

    Конструкция наследования class ИмяКлассаРодителя: метод доступа ИмяКлассаПотомка {методы потомка};
    Может наоборот?
    Конструкция наследования class ИмяКлассаПотомка: метод доступа ИмяКлассаРодителя {методы потомка};

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Лучше бы вместо смс ввели

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок