该类的对象如何仍然能够访问其成员函数?

时间:2016-03-26 06:20:09

标签: c++ linux class

我在使用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:

1 个答案:

答案 0 :(得分:2)

void cl()的代码不是对象的一部分。编译器静态地知道它的地址,并将它放在main()和二进制内的任何其他函数中。

基本上,您调用一个函数来接受指向对象的指针作为参数,但不会使用它。如果您尝试访问Bcl()的某些字段,则会出现未定义的行为。