平时在写程序时候一直没有注意到,关于成员函数的调用问题。比如这样一段程序:void CAbcDoc::OnC()
{
// 调用CThreshold类中的方法
    CThreshold fngprnt(&newdib);
    fngprnt.AdaptiveThreshold(); // 客户区重绘
UpdateAllViews(NULL);

}平时自然的就写了UpdateAllViews(NULL)。有个地方不解:   UpdateAllViews() 不是CDocument的成员函数么。为什么在此函数中,调用该成员函数的时候,没有实例化一个对象后然后调用该成员函数呢。类似的,Invalidate()    OnInvalidate()在CAbcView中使用,也是同样的道理。我知道在使用这些函数的时候  前面不需要通过对象来调用,但是不知道为什么不需要。 一般来说,不是都要生成一个对象来调用成员函数的么?   那么,我们在什么时候,调用成员函数时候不需要先产生一个类的对象去调用呢?新手,谢谢大家能给予指导和帮助

解决方案 »

  1.   

    UpdateAllViews(NULL);
    等同于
    this->UpdateAllViews(NULL);
    这个this就是类对象
      

  2.   

    CAbcDoc是CDocument的子类,所以也有UpdateAllViews成员函数
    在成员函数中调用成员函数就相当于:this->UpdateAllViews,this就是指向本对象的指针
    而且非静态成员函数接收参数时第一个隐含的(你看不到)就是this
    只有在类的外部或者调用其它对象的函数时才必须生成一个对象
      

  3.   

    CAbcDoc类继承的哪个类?建议看看MFC的Hierarchy Chart。
    InitInstance()函数中会对主对话框类进行实例化。
      

  4.   

    你的CAbcDoc类不就是派生自CDocument类的吗?
      

  5.   

    UpdateAllViews(NULL);
    即调用的this->UpdateAllViews(NULL);
    你的类是派生出来的,没有重写UpdateAllViews,故调用的就是父类的函数。
      

  6.   


    感觉这个问题挺简单的(也可能是我想错了)  在调用类中的成员函数的时候会隐含有一个this指针吧 this指针指向这个类   当然你在调用非本类中的函数的时候当然是没有this指针的  当然需要你来定义一个指向   
      

  7.   

    类内自己的成员函数的调用不需要显式指定的。
    如果没有这个类的实例化对象,也就不存在这个函数的执行。有了这个类的实例化对象,隐含的对象实例的指针就是this。