gpt4 book ai didi

c++ - 通过转换基类指针设置派生类字段

转载 作者:太空狗 更新时间:2023-10-29 23:44:17 25 4
gpt4 key购买 nike

class A
{
public:
int a;
};
class B:public A
{
public:
int b;
void foo()
{
b=a*a;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A * a=new A;
a->a=10;
((B*)a)->foo();
cout<<((B*)a)->b;
}

它适用于 b=100,但我不知道它的工作规则。 b 存储在哪里?我只是不知道它是如何调用的。

最佳答案

基本上,这里发生的是未定义的行为。它没有特别的名字;它很可能被称为编程错误。你的类 A 的内存布局是:

int a;

B的内存布局是:

int a;
int b;

所以在你的情况下,你只为 a 分配空间,但你很幸运,紧随其后的空间是空闲的(这样就不会覆盖其他信息)并且它不会与未分配的空间(否则,尝试写入未分配的页面时可能会发生错误)。所以 b 存储在空闲空间中。

简而言之:不要依赖此代码来工作!

关于c++ - 通过转换基类指针设置派生类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33077242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com