Если вы хотите изменить значение _int, вы должны передать его указатель, то, что вы сейчас делаете, это вызов по значению.
B::B(int* val)
{
m_int = val; // not ref
}
, а m_int должен иметь тип int*
, а не int
Для второй проблемы, вы храните значение производного класса в указателе на base, поэтому, когда вы пытаетесь увидеть, что находится внутри obj2, вы видите только часть типа base, поэтому вы получаете дочерние сообщенияне может быть оценена.
Edit -
Если вы хотите увидеть, что на самом деле находится в obj2, вы должны снова привести его к производному типу.И вы не всегда можете знать, что во время выполнения ...