This repository has been archived on 2026-07-28. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2025-04-13 21:48:15 +03:00

62 lines
1.1 KiB
Markdown

# Наследования
```cpp
class A {
int a;
public:
A(int x = 0) : a(x) {}
void f() { cout << a; }
};
class B : public/private/protected A/*, C*/ { // private by default
int b;
public:
B(int x = 0, int y = 0) : A(x), b(y) {}
void f() {
cout << a << b; // error. A is private
}
};
```
```cpp
int main() {
A obj_a, *pa;
B obj_b, *pb;
pa = &obj_a;
pb = &obj_b;
// при открытом наследовании
pa = pb;
pb = (B*)pa;
// при закрытом наследовании
pa = (A*)pb;
// pb = (B*)pa; - невозможно
*pa = &obj_a;
pa->f(); // вызов из a
*pa = &obj_b;
pa->f(); // вызов тоже из a, т.к. не виртуальная функция
}
```
в ситуации любого наложения функций, происходит перекрытие имён
```cpp
class A {
void f();
}
class B : A {
void f(int) { f(); } // error
}
```
конструкторы не наследуются
## консруктор копирования
```cpp
B (const B &a) : A(a) {}
```