Heim > Fragen und Antworten > Hauptteil
#include <iostream>
using namespace std;
class Myclass
{
public:
Myclass():i(0){};
void f1(){cout<<"f1"<<endl;}
void f2(){cout<<i<<endl;}
private:
int i;
};
int main()
{
Myclass *p = NULL;
// f1
p->f1();
// error
p->f2();
return 0;
}
如注释所说,p->f2()出错,求解答
PHP中文网2017-04-17 11:40:32
调用成员函数时会把this指针当做参数传入,f1()
函数体内还是cout<<"f1"<<endl;
,这个不会有问题。而f2()
函数体内实际是cout<<this->i<<endl;
,this指针是NULL,所以会出错
怪我咯2017-04-17 11:40:32
Myclass *p,p只是有Myclass的类地址访问能力,但是没有分配自己的数据堆,调用f1只是访问类的函数,但是f2执行过程中访问了i这个变量,这个变量是不存在的,因为p的数据堆就不存在,所以问会出错,同上面的this为空。