64,654
社区成员
发帖
与我相关
我的任务
分享
class B
{
};
class A : public B
{
};
class C : public B
{
};
int main(void)
{
B* b = new A; // upcasting, OK
A* a = (A*)b; // downcasting, OK,因为此时b所指向的对象的确就是一个A对象
C* c = (C*)b; // downcasting, NOT OK,因为此时b所指向的对象是一个A对象,而这里要转换成一个C对象
return 0;
}
class B
{
};
class A : public B
{
}
// 这就是所谓的is-a关系,即A is-a B
// 尽管A中有一个完整的B子对象(subobject),但是我们还是认为A和B是is-a的关系,而非has-a的关系。
class B
{
};
class A
{
B b; // 或者 B* b; 或者B& b;
};
// 这就是典型的has-a关系,即A has-a B object