4.3 Виртуальные методы

7
Программирование на языке C++ Лекция 4 Виртуальные методы Александр Смаль 1/7

Transcript of 4.3 Виртуальные методы

Page 1: 4.3 Виртуальные методы

Программирование на языке C++Лекция 4

Виртуальные методы

Александр Смаль

1/7

Page 2: 4.3 Виртуальные методы

Переопределение методов (overriding)

struct Person {string name() const { return name_; }...

};struct Professor : Person {

string name() const {return "Prof. " + Person ::name ();

}...

};

Professor pr("Stroustrup");cout << pr.name() << endl; // Prof. StroustrupPerson * p = &pr;cout << p->name() << endl; // Stroustrup

2/7

Page 3: 4.3 Виртуальные методы

Виртуальные методы

struct Person {virtual string name() const { return name_; }...

};struct Professor : Person {

string name() const {return "Prof. " + Person ::name ();

}...

};

Professor pr("Stroustrup");cout << pr.name() << endl; // Prof. StroustrupPerson * p = &pr;cout << p->name() << endl; // Prof. Stroustrup

3/7

Page 4: 4.3 Виртуальные методы

Чистые виртуальные (абстрактные) методы

struct Person {virtual string occupation () const = 0;...

};struct Student : Person {

string occupation () const {return "student";}...

};struct Professor : Person {

string occupation () const {return "professor";}...

};

Person * p = next_person ();cout << p->occupation ();

4/7

Page 5: 4.3 Виртуальные методы

Виртуальный деструктор

К чему приведёт такой код?

struct Person {...

};struct Student : Person {

...private:

string uni_;};

int main() {Person * p = new Student("Alex" ,21,"Oxford");...delete p;

}5/7

Page 6: 4.3 Виртуальные методы

Виртуальный деструктор

Правильная реализация:

struct Person {...virtual ~Person () {}

};struct Student : Person {

...private:

string uni_;};

int main() {Person * p = new Student("Alex" ,21,"Oxford");...delete p;

}6/7

Page 7: 4.3 Виртуальные методы

Полиморфизм

ПолиморфизмВозможность единообразно обрабатывать разные типы данных.

Перегрузка функцийВыбор функции происходит в момент компиляции на основетипов аргументов функции, статический полиморфизм.

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

7/7