我在使用class和object时遇到了一些麻烦。我有这个代码,我只是修改了它的对象的地址,但无论我增加多少次它仍然能够访问成员函数。请帮助我,我没有得到我认为这不是假设发生的事情吗?
#include<iostream>
using namespace std;
class B
{
int a,d,b,c;
public:
void cl()
{
int f,m,b;
cout<<"\nvoid cl";
}
} obj;
int main()
{ B *m;
int *i;
m=&obj;
cout<<"\nsize of obj="<<sizeof(obj);
cout<<"\naddress of obj "<<&obj;
cout<<"\nvalue of m="<<m;
i=new int;
// for(int j=0;j<10;j++)
cout<<"\n value of i "<<*i;
for(int j=0;j<10;j++)
{ m++;
cout<<"\nvalue of m++ "<<m++;
m->cl();
} cout<<"\n";
}
,输出
nik-pc@nik:~/Documents$ ./a.out
size of obj=16
address of obj 0x6013e0
value of m=0x6013e0
value of i 0
value of m++ 0x6013f0
void cl
value of m++ 0x601410
void cl
value of m++ 0x601430
void cl
value of m++ 0x601450
void cl
value of m++ 0x601470
void cl
value of m++ 0x601490
void cl
value of m++ 0x6014b0
void cl
value of m++ 0x6014d0
void cl
value of m++ 0x6014f0
void cl
value of m++ 0x601510
void cl
nik-pc@nik:
答案 0 :(得分:2)
void cl()
的代码不是对象的一部分。编译器静态地知道它的地址,并将它放在main()
和二进制内的任何其他函数中。
基本上,您调用一个函数来接受指向对象的指针作为参数,但不会使用它。如果您尝试访问B
内cl()
的某些字段,则会出现未定义的行为。