Точно так, как говорится в вопросе!
Допустим, у меня есть следующий фрагмент
class A
{
int x;
int y;
}
class B : public A
{
int z;
}
class C
{
A a;
public C(A a) : a(a){}
}
Что произойдет, если я вызову конструктор C с классом B, скопирует ли он данные части A в класс? Или тоже где-то хранить данные B?
Заранее спасибо! Это может быть глупый вопрос, но я так и не понял.
Если вы передаете экземпляр B
к C
конструктор, который принимает A
по значению B
экземпляр будет нарезан, и просто A
часть останется. Так :
Будет ли это скопировать это данные части в классе?
этот.
Так что конкретно нет возможности повернуть C::a
член обратно в B
экземпляр с тем же значением для z
как оригинал B
экземпляр — эта информация была потеряна во время (необратимой) операции среза.
Что произойдет, если я вызову конструктор C с классом B, скопирует ли он данные части A в класс?
Да. Это известно как нарезка — аргумент создан с использованием A
Копируй конструктор, который просто копирует A
субобъект.
Или тоже где-то хранить данные B?
Нет.