init commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Наследования
|
||||
|
||||
```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) {}
|
||||
```
|
||||
Reference in New Issue
Block a user