基类指针可以指向派生类对象.如果没有铸造,为什么反之亦然?逻辑上,基类没有足够的派生类信息,但派生类也应该具有基类的信息.我在这里遗漏了一些基础知识.
jk.*_*jk. 134
如果我告诉你我有一只狗,你可以放心地假设我有一只宠物.
如果我告诉你我有一只宠物,你不知道这只动物是狗,它可能是一只猫,甚至可能是一只长颈鹿.在不知道一些额外信息的情况下,你无法安全地假设我有一只狗.
类似地,派生对象是基类对象(因为它是子类),因此它可以由基类指针指向.但是,基类对象不是派生类对象,因此无法将其分配给派生类指针.
(你现在听到的吱吱声是类比拉伸)
假设你现在想给我买一件宠物礼物.
在第一个场景中,你知道它是一只狗,你可以给我带一条皮带,每个人都很开心.
在第二种情况下,我没有告诉你我的宠物是什么,所以如果你打算给我买礼物,你需要知道我没有告诉你的信息(或者只是猜测),你给我买了一条皮带,如果它结果我真的有一只狗每个人都很开心.
然而,如果我真的有一只猫,那么我们现在知道你做了一个糟糕的假设(演员)并且在皮带上有一个不快乐的猫(运行时错误).
Bil*_*nch 11
我们有两个对象.
class A {
int a;
};
class B : A {
int b;
};
Run Code Online (Sandbox Code Playgroud)
分配一个实例B
.我们可以将其作为a A*
或a 接口B*
.
分配一个实例A
.如果我们将它投射到a B*
,是否应该为该成员分配空间b
?
Pup*_*ppy 10
呃,因为基类不是派生类.
当你有一个指向某个类型的有效指针时,你就是说指向的对象在某些位置会有某些数据,以便我们可以找到它.如果你有一个指向派生对象的指针,那么你要保证指向的对象包含所有Derived的数据成员 - 但是当你指向Base时,它实际上没有那个和Bad Things Happen™.
但是,Derived保证将所有Base数据成员放在相同的位置.这就是为什么指向Base的指针实际上可以指向Derived.
归档时间: |
|
查看次数: |
67336 次 |
最近记录: |