【发布时间】:2011-09-16 08:20:46
【问题描述】:
我有一堂课:
class ProjectService : public CProjectT<CSoapMSXMLInetClient>
{
...
}
我在这个派生类中实现了HRESULT ConnectToServer(); 函数。然后我实例化了一个对象并调用了一个函数:
ProjectService project;
project.f1();
现在,f1() 调用 f2() 和 f2() 调用 ConnectToServer()。所有这些函数都是CProjectT<CSoapMSXMLInetClient> 的成员
这里的问题是,CProjectT<CSoapMSXMLInetClient>::ConnectToServer() 被调用而不是 ProjectService::ConnectToServer()。 (我在两个ConnectToServer() 函数的第一行都有一个调试断点。基类中的那个被命中。)
为什么?
【问题讨论】:
-
ConnectToServer函数是用
virtual关键字定义的吗? -
不,不是。但我有派生类的实例而不是基类。我认为在这种情况下应该调用派生函数
-
@Ali: 会被调用,如果ConnectToServer被定义为virtual,否则编译器根本不会把它放到virtual table中,一直调用base函数。
-
@Ozair:您应该将该评论(附有简短说明)作为答案
-
这就是虚函数的用途。
标签: c++ inheritance overriding