MFC中静态成员函数可以调用非静态成员函数吗?

MFC中静态成员函数可以调用非静态成员函数吗?,第1张

不可以

因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。

这里我知道有两种方法

1。中转实现。

可以将doc类作为一个中转,在其他的非mainframe类中都可以使用下列语句调用 doc中的对象

CFrameWnd pFrame=(CFrameWnd )(AfxGetApp()->m_pMainWnd);

CMOfqk0028Doc pDoc=(CMOfqk0028Doc

)pFrame->GetActiveDocument();

然后用pDoc指针调用doc类中对象,

2,直接定义实现

比如 需要调用的类叫做CMyMfDlg类

在需要调用该类的时候 首先定义头文件#include “CMyMfDlgh" 然后在使用时,申明一个对象 CMyMfDlg dlg 然后就可以使用该类中的对象,比如说调用函数dlgFind(),或者调用成员变量dlgm_you

(由于情况很多种 如果还时不行可以联系我 大家一起讨论)

(1):在FTPCommandprogressh文件中定义一个CFileDlg类指针m_pDlg;

(2):在CFileDlgh文件中定义CFTPCommandprogress类m_ftpObj对象;

(3):在CFileDlgcpp文件中的OnInitDialog()函数中添加下面一行代码

m_ftpObjm_pDlg = this ;

(4):在FTPCommandprogresscpp文件中就可以使用m_pDlg指针去调用CFileDlgcpp中的所有的成员函数了。

参考一下!

静态方法只能调用静态成员,如果您的子类继承自主类,那么您要通过静态方法调用主类中的成员,那么您只能在静态成员中保存当前类的实例对象,例如像单例模式的样式。如下所示:

class mainclass {

public:

int fn() {

return 1;

}

mainclass() {

}

};

class childclass :public mainclass {

private:

static childclass mInstance;

childclass() {

}

public:

static childclass getInstance() {

if (mInstance == null) {

mInstance = new childclass();

}

return mInstance;

}

static fn2() {

childclassgetInstance()fn();

}

}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12182809.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存