как получить объект класса родителя из класса наследника?
как получить объект класса родителя из класса наследника?
к примеру
class A : public B
{
}
как мне получить B имея объект типа a ?
Ответы (1 шт):
Автор решения: kenjyminamori
→ Ссылка
Как Вам уже подсказали в комментариях объект класса A является собой совокупностью объекта класса B и полей класса А.
Т.е. буквально в памяти объект класса А хранится таким образом
|поля класса A| поля класса B |
Таким образом компилятору не составит труда привести объект класса А к объекту класса B:
#include <iostream>
class B {
public:
int b;
B(int b) : b(b){}
};
class A: public B {
public:
int a;
A (int a, int b) : B(b), a(a) {}
};
int main(int, char**) {
A derived (1, 2);
std::cout << "Constructed: "<< derived.a << ", " << derived.b << "\n";
// Вывод в консоли:
// Constructed: 1, 2
B basic_from_derived = static_cast<B>(derived); // Это преобразование происходит прямо во время компиляции
std::cout << "Basic: "<< basic_from_derived.b <<"\n"; // Естественно, поле а нам уже не доступно
// Вывод в консоли:
// Basic: 2
}
В случае множественного наследования этот код будет работать немного не так, как ожидается, но это уже отельный вопрос.