
在下面的代码片段中,f和b的所有变体如何以相同的值结束?
struct Foo { int x;};struct bar : public Foo { int y;};#include <iostream>int main (){ bar bar; Foo * f = &bar; bar * b = &bar; std :: cout << f << " " << b << " " << (f == b) << "\n"; voID * fv = f; voID * bv = b; std :: cout << fv << " " << bv << " " << (fv == bv) << "\n"; int fi = reinterpret_cast <int> (f); int bi = reinterpret_cast <int> (b); std :: cout << fi << " " << bi << " " << (fi == bi) << "\n";}解决方法 关于基类对象与其子类对象不具有相同地址的唯一时间是涉及多重继承时. 在上面的示例中,内存可能如下所示:
/ --------- \ / | x | > This is the Foo portion of barThis is the whole bar object < --------- / \ | y | \ ---------
对象的两个视图具有相同的起点,因此指向任一视图的指针将具有相同的值.
在多重继承中,事情变得更加复杂.说你有:
struct Foo1{ int x; };struct Foo2{ int y; };struct bar : public Foo1,public Foo2 { int z; };bar bar; 现在记忆必须像这样:
/ --------- \ / | x | > This is the Foo1 portion of bar / --------- / \ This is the whole bar object < | y | > This is the Foo2 portion of bar \ --------- / \ | z | \ ---------
因此& bar和(Foo1 *)& bar将具有相同的值,而(Foo2 *)& bar将具有不同的值,因为对象的Foo2部分从更高的地址开始.
总结以上是内存溢出为你收集整理的c – 如何将子类指针严格地等于父类指针?全部内容,希望文章能够帮你解决c – 如何将子类指针严格地等于父类指针?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)