Типы наследования

Обзор механизмов объектно-ориентированного программирования: инкапсуляции, полиморфизма, абстракции и наследования. Анализ реализации классом-наследником спецификации уже существующего базового класса, заимствования функциональности родительского класса.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 27.04.2011
Размер файла 13,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования РФ

Тульский государственный университет

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

Выполнила Гребецкая Е.В

Проверил Савин Н.И

Тула 2011

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

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

наследование полиморфизм инкапсуляция программирование

Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. baseclass). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derivedclass).

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

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++, а так же в некоторых других языках программирования.

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

class A{ //базовый класс

};

class B : public A{ //public наследование

}

class C : protected A{ //protected наследование

}

class Z : private A{ //private наследование

}

В C++ существует три типа наследования: public, protected, private.

Если класс объявлен как базовый для другого класса со спецификатором доступа public, тогда public члены базового класса доступны как public члены производного класса, protected члены базового класса доступны как protected члены производного класса.

Если класс объявлен как базовый для другого класса со спецификатором доступа protected, тогда public и protected члены базового класса доступны как protected члены производного класса.

Если класс объявлен как базовый для другого класса со спецификатором доступа private, тогда public и protected члены базового класса доступны как private члены производного класса.

Одним из основных преимуществ public-наследования является то, что указатель на классы-наследники может быть неявно преобразован в указатель на базовый класс, то есть для примера выше можно написать:

A* a = new B;

Вот пример множественного открытого наследования в С++:

class B

{int Bi;

public:

int i;

B() {};

B(int t){Bi=t;

cout <<"k B";}

~B(){D cout <<"D B";}

void prn(){

cout <<"B Bi="<<Bi<<endl;}

class B1: public B

{int B1i;

public:

B1(int t1, int t2) : D(t1){B1i=t2;

cout<<"K B1\n";}

~B1(){cout <<"D B1"<< endl;

void prn() {cout <<'B1 B1i="<<B1i<<endl;

b::prn()

int _tmain(int argc, _TCHAR* argv[])

{

return 0;

}

Здесь в базовом классе доступны все элементы данного класса, а в производном доступны элементы открытой секции.

Защищенные члены базового класса

classB

protected:

{int b;

public:

int b0;

void set(int t)

{b=t;}

};

class D:public B// все элементы базового класса являются защищщенными. но доступны в производном классе

{int d;

public:

int d0;

void show()

{cout << b << d <<endl;

return 0;

}

class D:protected B

{int d;

public:

int d0;

void show(){};

}

Открытые элементы класса В становятся недоступными через экземпляр производного класса.

Полиморфизм-это множество методов при одинаковой форме. К полиморфизму относится перегрузка методов и он проявляется на этапе трансляции. Run-timeполиморфизм - при использовании этого полиморфизма конкретный метод определяется на этапе выполнения, и выбор метода зависит от выполнения программы. Этот полиморфизм базируется на использовании указателей классов. При этом указатель типа базового класса можно использовать в качестве указателей производного класса можно использовать в качестве указателей производного класса от данного базового класса.

Абстрактные классы

Используются только для объявления переопределения методов. Абстрактный класс нельзя использовать для инстанцирования, т.е. создать экземпляр. Достаточно в его объявлении присутствие одной чистой виртуальной функции. Класс может быть переведен в абстрактный следующим образом:

Virtualvoidprn() = 0;

Чистые виртуальные функции принуждают транслятор к контролю их переопределения.

Размещено на Allbest.ru


Подобные документы

  • Причины возникновения объектно-ориентированного программирования. Графическое представление классов; их отличия от других абстрактных типов данных. Типы абстракции, используемые при построении объекта. Сущность инкапсуляции, наследования и полиморфизма.

    контрольная работа [222,1 K], добавлен 04.06.2014

  • Цели объектно-ориентированного программирования, абстрактные классы и адреса базовых классов, множественное и виртуальное наследование. Инициализация элементов производного класса, программный вызов конструкторов базового и производного классов.

    реферат [21,8 K], добавлен 31.10.2011

  • Свойства объектно-ориентированного языка программирования. Понятия инкапсуляции и наследования. Виртуальные функции и полиморфизм. Инициализация экземпляра объекта с помощью конструктора. Динамическое создание объектов. Совместимость объектных типов.

    реферат [17,0 K], добавлен 15.04.2015

  • Основные понятия объектно-ориентированного программирования в PHP5. Структурный и объектно-ориентированный подход. Класс как абстрактный тип. Реализация класса. Конструкторы и деструкторы. Функция l_visited_style изменение стиля посещенных ссылок.

    курсовая работа [433,2 K], добавлен 13.06.2008

  • Основные понятия абстракции, инкапсуляции, наследования и полиморфизма. Основы проектирования игр. Работа с графическими библиотеками. Создание дружественного пользовательского интерфейса. Разработка игры "Змейка", краткое описание классов, алгоритмы.

    курсовая работа [757,2 K], добавлен 19.06.2012

  • Объектно-ориентированный язык программирования: общая характеристика и свойства. Базовый и производный классы, конструкторы производного класса. Конструкторы и неопределенность при множественном наследовании. Роль наследования при разработке программ.

    курсовая работа [688,3 K], добавлен 23.12.2013

  • Основные концепции объектно-ориентированного программирования. Разработка компонента ActiveX (элемента управления Label с новым свойством Caption) на базе стандартного текстового поля. Тестирование пользовательского класса Auto и коллекции его объектов.

    курсовая работа [834,8 K], добавлен 07.04.2014

  • Изображение класса на диаграмме UML. Инкапсуляция как средство защиты его внутренних объектов. Использование принципа полиморфизма для реализации механизма интерфейсов. Создание новых классов путем наследования. Ассоциация как вид отношений между ними.

    лекция [516,6 K], добавлен 03.12.2013

  • Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.

    презентация [74,8 K], добавлен 14.10.2013

  • Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.

    контрольная работа [60,1 K], добавлен 17.01.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.