平时在写程序时候一直没有注意到,关于成员函数的调用问题。比如这样一段程序:void CAbcDoc::OnC()
{
// 调用CThreshold类中的方法
CThreshold fngprnt(&newdib);
fngprnt.AdaptiveThreshold(); // 客户区重绘
UpdateAllViews(NULL);
}平时自然的就写了UpdateAllViews(NULL)。有个地方不解: UpdateAllViews() 不是CDocument的成员函数么。为什么在此函数中,调用该成员函数的时候,没有实例化一个对象后然后调用该成员函数呢。类似的,Invalidate() OnInvalidate()在CAbcView中使用,也是同样的道理。我知道在使用这些函数的时候 前面不需要通过对象来调用,但是不知道为什么不需要。 一般来说,不是都要生成一个对象来调用成员函数的么? 那么,我们在什么时候,调用成员函数时候不需要先产生一个类的对象去调用呢?新手,谢谢大家能给予指导和帮助
{
// 调用CThreshold类中的方法
CThreshold fngprnt(&newdib);
fngprnt.AdaptiveThreshold(); // 客户区重绘
UpdateAllViews(NULL);
}平时自然的就写了UpdateAllViews(NULL)。有个地方不解: UpdateAllViews() 不是CDocument的成员函数么。为什么在此函数中,调用该成员函数的时候,没有实例化一个对象后然后调用该成员函数呢。类似的,Invalidate() OnInvalidate()在CAbcView中使用,也是同样的道理。我知道在使用这些函数的时候 前面不需要通过对象来调用,但是不知道为什么不需要。 一般来说,不是都要生成一个对象来调用成员函数的么? 那么,我们在什么时候,调用成员函数时候不需要先产生一个类的对象去调用呢?新手,谢谢大家能给予指导和帮助
等同于
this->UpdateAllViews(NULL);
这个this就是类对象
在成员函数中调用成员函数就相当于:this->UpdateAllViews,this就是指向本对象的指针
而且非静态成员函数接收参数时第一个隐含的(你看不到)就是this
只有在类的外部或者调用其它对象的函数时才必须生成一个对象
InitInstance()函数中会对主对话框类进行实例化。
即调用的this->UpdateAllViews(NULL);
你的类是派生出来的,没有重写UpdateAllViews,故调用的就是父类的函数。
感觉这个问题挺简单的(也可能是我想错了) 在调用类中的成员函数的时候会隐含有一个this指针吧 this指针指向这个类 当然你在调用非本类中的函数的时候当然是没有this指针的 当然需要你来定义一个指向
如果没有这个类的实例化对象,也就不存在这个函数的执行。有了这个类的实例化对象,隐含的对象实例的指针就是this。