Я не могу понять, что означает часть объекта в квадратных скобках ([bsm :: Material], см. Рис. Ниже). Я ожидал бы, что объект ml типа MaterialLayer будет составлен только из части типа Object (базовый класс) + два поля толщины и материал (указатель на Material).
Итак, какова часть между квадратными скобками, показанная Visual Studio 2010 в ее окне Watch?
Вот определение классов Material, Object и MaterialLayer:
class Object
{
public:
// Methods
};class Material : public Object
{
int type;
std::string name;
std::vector<Property *> properties;
public:
// Methods
};class MaterialLayer : public Object
{
double thickness;
Material * material;
public:
// Methods
};
Это выглядит как ml
объявлен как bsm::MaterialLayer*
, но указатель типа bsm::Material*
было присвоено ему путем типирования:
bsm::MaterialLayer *ml;
bsm::Material *foo;
ml = (bsm::MaterialLayer *)foo;
Это не приводит к ошибке приведения типа во время компиляции, но почти наверняка приведет к таким ошибкам, как бессмысленные значения в thickness
а также material
,
Однако, поскольку они оба имеют общего родителя, Watch показывает своего реального потомка в квадратных скобках.