1.1 KiB
1.1 KiB
Наследования
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
}
};
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, т.к. не виртуальная функция
}
в ситуации любого наложения функций, происходит перекрытие имён
class A {
void f();
}
class B : A {
void f(int) { f(); } // error
}
конструкторы не наследуются
консруктор копирования
B (const B &a) : A(a) {}