ݺߣ

ݺߣShare a Scribd company logo
Программирование на языке C++
Лекция 4
Наследование
Александр Смаль
1/6
Наследование
Наследование — это механизм, позволяющий создавать
производные классы, расширяя уже существующие.
struct Person {
string name () const { return name_; }
int age() const { return age_; }
private:
string name_;
int age_;
};
struct Student : Person {
string university () const { return uni_; }
private:
string uni_;
};
2/6
Класс-наследник
У объектов класса-наследника можно вызывать публичные
методы родительского класса.
Student s;
cout << s.name () << endl
<< s.age() << endl
<< s.university () << endl;
Внутри объекта класса-наследника хранится экземпляр
родительского класса.
name_ age_
Person
name_ age_ uni_
Person
Student
3/6
Создание/удаление объекта производного класса
При создании объекта производного класса сначала
вызывается конструктор родительского класса.
struct Person {
Person(string name , int age)
: name_(name), age_(age)
{}
...
};
struct Student : Person {
Student(string name , int age , string uni)
: Person(name , age), uni_(uni)
{}
...
};
После деструктора Student вызывается деструктор Person. 4/6
Приведения
Для производных классов определены следующие приведения:
Student s("Alex", 21, "Oxford");
Person & l = s; // Student & -> Person &
Person * r = &s; // Student * -> Person *
Поэтому объекты класса-наследника могут присваиваться
объектам родительского класса:
Student s("Alex", 21, "Oxford");
Person p = s; // Person("Alex", 21);
При этом копируются только поля класса-родителя (срезка).
(Т.е. в данном случае вызывается конструктор копирования
Person(Person const& p), который не знает про uni_.)
5/6
Модификатор доступа protected
∙ Класс-наследник не имеет доступа к private-членам
родительского класса.
∙ Для определения закрытых членов класса доступных
наследникам используется модификатор protected.
struct Person {
...
protected:
string name_;
int age_;
};
struct Student : Person {
... // можно менять поля name_ и age_
};
6/6

More Related Content

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

  • 1. Программирование на языке C++ Лекция 4 Наследование Александр Смаль 1/6
  • 2. Наследование Наследование — это механизм, позволяющий создавать производные классы, расширяя уже существующие. struct Person { string name () const { return name_; } int age() const { return age_; } private: string name_; int age_; }; struct Student : Person { string university () const { return uni_; } private: string uni_; }; 2/6
  • 3. Класс-наследник У объектов класса-наследника можно вызывать публичные методы родительского класса. Student s; cout << s.name () << endl << s.age() << endl << s.university () << endl; Внутри объекта класса-наследника хранится экземпляр родительского класса. name_ age_ Person name_ age_ uni_ Person Student 3/6
  • 4. Создание/удаление объекта производного класса При создании объекта производного класса сначала вызывается конструктор родительского класса. struct Person { Person(string name , int age) : name_(name), age_(age) {} ... }; struct Student : Person { Student(string name , int age , string uni) : Person(name , age), uni_(uni) {} ... }; После деструктора Student вызывается деструктор Person. 4/6
  • 5. Приведения Для производных классов определены следующие приведения: Student s("Alex", 21, "Oxford"); Person & l = s; // Student & -> Person & Person * r = &s; // Student * -> Person * Поэтому объекты класса-наследника могут присваиваться объектам родительского класса: Student s("Alex", 21, "Oxford"); Person p = s; // Person("Alex", 21); При этом копируются только поля класса-родителя (срезка). (Т.е. в данном случае вызывается конструктор копирования Person(Person const& p), который не знает про uni_.) 5/6
  • 6. Модификатор доступа protected ∙ Класс-наследник не имеет доступа к private-членам родительского класса. ∙ Для определения закрытых членов класса доступных наследникам используется модификатор protected. struct Person { ... protected: string name_; int age_; }; struct Student : Person { ... // можно менять поля name_ и age_ }; 6/6