Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по инфе 3 семестр.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
203.37 Кб
Скачать

Полиморфизм Полиморфизм – это принцип ооп, позволяющий включать в состав класса несколько функций с одинаковыми именами, но выполняющих различные действия.

Статический полиморфизм — поддерживается посредством перегрузки функций и операторов во время компиляции

Динамический полиморфизм — поддерживается посредством виртуальных функций во время выполнения программы

Компилятор, обрабатывая вызов функции, сопоставляет список фактических параметров со списками формальных параметров всех методов класса, имеющих то же имя, и выбирает ту функцию, у которой список формальных параметров совпал со списком фактических параметров при вызове функции:

#include <string.h>

#include <iostream.h>

class Draw

{int x1, y1, x2, y2, r;

char *message;

public:

Draw();

virtual ~Draw();

void show();

void show(int xx1, int yy1, int xx2, int yy2);

void show(int xx1, int xx2, int rr);};

Draw::Draw()

{x1=x2=y2=y1=r=0;

message=new char[10];

strcpy(message, "text");}

 Draw::~Draw()

{delete[] message;

message=NULL;}

void Draw::show()

{cout << message << endl;}

void Draw::show(int xx1,int yy1,int xx2,int yy2)

{cout << "Rectangle" << endl;}

void Draw::show(int xx1,int xx2,int rr)

{cout << "Circle" << endl;}

int main(void)

{Draw draw;

draw.show();

draw.show(1,1,20,10);

draw.show(10,10,10);

return 0;}

виртуальная функция —В ООП метод (функция) класса, который может быть переопределён вклассах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Таким образом, программисту необязательно знать точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.

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

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

Наследование – это принцип ООП, посредством которого на базе существующих классов создаются новые классы, получающие по наследству от базовых классов свойства и методы. Наследование позволяет существенно экономить программный код.

Создание класса-наследника в С++

Пример базового класса

class Person

{

protected:

char Name[30];

public:

Person ();

void SetName (char* );

void Show ();

} ;

Класс-наследник

class Student : public Person

{

char dept[30];

public:

Student (char*, char* );

void SetDept (char* );

void Show ();

} ;

Новые классы наследуют только те свойства и методы, которые объявлены в разделах public и protected базовых классов. При этом свойства и методы из раздела protectedдоступны только базовому классу и его наследникам, тогда как свойства и методы из раздела public доступны объектам любого класса. Исключением из этого правила являются конструкторы и деструкторы, которые не наследуются. Методы класса Person

Person::Person()

{

}

void Person::SetName (char* N)

{

strcpy (Name, N);}

void Person::Show ()

{

std::cout << “My name is ” << Name << std::endl;}

Собственные методы класса Student

Student::Student (char* N, char* D)

{

strcpy (Name, N);

strcpy (Dept, D);

}

void Student::SetDept (char* D)

{

strcpy (Dept, D);

}

void Student::Show ()

{

std::cout << Name << “ “ << Dept << std::endl;

}

Как видно, методы класса student используют как собственное свойство, так и свойство, полученное по наследству.

Текст программы

int main ()

{

Person A;

A.SetName (“Tom”);

Student B(“Ann”, “MTS”);

A.Show ();

B.Show ();

Person* pperson = &B;

Student* pstudent = &B;

pperson->Show ();

pstudent->Show ();

B.SetName (“Kate”);

B.SetDept (“GF”);

pstudent->Show ();

return 0;

}

На экране:

My name is Tom

Ann MTS

My name is Ann

Ann MTS

Kate GF

Основные отличия языка C++

Язык C++ имеет множество дополнительных элементов по сравнению с языком C, которые могут быть откомпилированы только компилятором C++

Традиционно программы, написанные на C, имеют расширение *.c, на C++ – *.cpp, и для их компиляции выбирается соответствующий компилятор.

Основное и принципиальное отличие C++ от C составляют классы, эта составляющая языка рассмотрена в гл. 17. Также в C++ появляются новые элементы языка, такие как объекты-потоки для ввода/вывода данных cin и cout, новые операторы (:: – оператор разрешения области видимости), средства для управления памятью (операторы new и delete), шаблоны, обработка исключений.

Основные свойства ООП:

  1. Инкапсуляция- сочетание в одном объекте данных и операций над ними.

  2. Наследование- сохранение свойств базовых классов в производных.

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

Инкапсуляция

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

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

Процесс, посредством которого один объект может наследовать свойства другого объекта, добавлять к ним черты, характерные только для него. (Автомобиль-автобус).

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

В ООП класс, от которого наследуют, принято называть базовым/ родительским.

Класс, который получается называется порожденным/производным.