我无法理解方括号内的对象部分是什么意思([bsm :: Material]见下图)。我希望MaterialLayer类型的对象ml只由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
};
答案 0 :(得分:3)
看起来ml
被声明为bsm::MaterialLayer*
,但是通过类型转换为它分配了类型为bsm::Material*
的指针:
bsm::MaterialLayer *ml;
bsm::Material *foo;
ml = (bsm::MaterialLayer *)foo;
这在编译时不会产生类型转换错误,但几乎肯定会导致thickness
和material
中的无意义错误。
但是,由于他们都共享一个共同的父母,因此Watch会在方括号中显示其真实的孩子。