МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Наследование в объектно-ориентированном программировании. Способы реализации наследования в программе: простое, множественное.





Наследование – один из главных механизмов объектно-ориентированного программирования языка С++. С его помощью можно разрабатывать очень сложные классы, продвигаясь от общего к частному, а также наращивать уже созданные классы, получая от них новые классы, отличающиеся от исходных классов.

Покажем пример наследования со спецификатором public:

#include<iostream.h>

class Base

{ int x; // закрытый член -данное

public:

void setx(int n) {x=n;}

void showx(){cout<<x<<endl;}

};

class Derived: public Base

{int y;

public:

void sety(int n){y=n;}

void showy() (cout<<y<<endl;}

};

int main(void)

{Derived obj;

obj.setx(10);

obj.sety(20);

obj.showx();

obj.showy();

return 0;

}

Мно́жественное насле́дование — свойство, поддерживаемое частью объектно-ориентированных языков программирования, когда класс может иметь более одногосуперкласса (непосредственного класса-родителя), интерфейсы поддерживают множественное наследование во многих языках программирования. Эта концепция является расширением «простого (или одиночного) наследования» (англ. single inheritance), при котором класс может наследоваться только от одного суперкласса.

Множественное наследование позволяет классу перенимать функциональность у множества других классов, как например, класс StudentMusician может наследовать от класса Person, класса Musician и класса Worker, что сокращённо можно написать:

8 Понятие абстрактного класса - дайте определение. Приведите пример.

 

 

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

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

Сформируем наиболее важные правила работы с абстрактными методами и классами:

· Тип параметра метода не может быть абстрактным классом, также как и тип возвращаемого методом значения.

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

· Методы абстрактного класса могут вызывать абстрактные методы этого же класса. В подобном случае будет вызван соответствующий типу объекта метод, определенный в производном классе.

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

· Любой класс, произведенный от абстрактного класса, унаследует от него абстрактные методы. Чтобы получить возможность создания объекта производного класса, в нем нужно переопределить все абстрактные методы.

· Абстрактный класс может иметь конструкторы и деструктор. Конструктор абстрактного класса будет вызываться при создании объектов производных классов, а деструктор – при их разрушении. Деструктор базового класса вызывается в последнюю очередь, когда уже разрушены «подобъекты», определенные в производных классах. Поэтому деструктор абстрактного базового класса не должен вызывать абстрактные методы своего класса, так как такой вызов приведет к ошибке во время выполнения программы.

 

Пример:

#include <iostream>   class Shape { public: virtual double area() const = 0; };   class Square: public Shape { public: Square(double a = 1): _a(a) { }   virtual double area() const { return _a * _a; }   private: double _a; };   class Circle: public Shape { public: Circle(double r = 1): _r(r) { }   virtual double area() const { return 3.14159265358 * _r * _r; }   private: double _r; };   int main() { Shape *shapes[5];   shapes[0] = new Circle (3); shapes[1] = new Square (2); shapes[2] = new Square (2.5); shapes[3] = new Circle (5); shapes[4] = new Circle (10);   for (int i = 0; i < 5; ++i) std::cout << shapes[i]->area() << std::endl;   for (int i = 0; i < 5; ++i) delete shapes[i];   return 0; }

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.