请问,怎样判断调用的是不是静态方法,请进
来源:百度知道 编辑:UC知道 时间:2024/06/15 08:39:38
void CSingleDocTemplate::AddDocument(CDocument* pDoc)
{
ASSERT(m_pOnlyDoc == NULL); // one at a time please
ASSERT_VALID(pDoc);
CDocTemplate::AddDocument(pDoc);//如何判定这是在调用父类的静态方法,还是调用父类的普通方法,因为这里用了:: 所以不容易区分
m_pOnlyDoc = pDoc;
}
我个人觉得50573750回答是错的,this指针并不是需要显示的加入函数中,
iceser的解释仍觉得不能够让人眼睛一亮,
{
ASSERT(m_pOnlyDoc == NULL); // one at a time please
ASSERT_VALID(pDoc);
CDocTemplate::AddDocument(pDoc);//如何判定这是在调用父类的静态方法,还是调用父类的普通方法,因为这里用了:: 所以不容易区分
m_pOnlyDoc = pDoc;
}
我个人觉得50573750回答是错的,this指针并不是需要显示的加入函数中,
iceser的解释仍觉得不能够让人眼睛一亮,
普通方法。
你见过有人在派生类里重写基类的静态方法的吗?
类似于这样的调用方式很常见,因为派生类重写了基类的方法,是希望增加一些自定义的处理,同时希望继续调用基类的方法来进行处理。而这种处理逻辑对静态方法来说,并不合理。
另外从上下文的意思来看,这里应该也是调用基类的普通方法。
如果仍然不确定,可以尝试修改代码来证明。
CDocTemplate::AddDocument(pDoc);
改为
( ( CDocTemplate * ) this )->AddDocument(pDoc);
如果能正常编译运行,那肯定就是普通方法了,否则就是静态方法。
另外,也可以直接找到该基类的头文件定义来查看。
?
应该是静态方法,要不然,第一个参数是&class_object就是this指针。
好像很容易判断。
不明白发消息问我;