导出类指针可以被当成基类指针使用吗?
ylwy 2012-04-01 10:14:26 书上有云:“在通过指针或引用方式操作时,派生类对象可以当作基类对象看待和处理......用派生类指针给基类指针赋值时,不需要显示转换”。可是,如下代码:
class Base{
public:
void doIt(const char *){cout <<"Base do it";}
};
class Derived: public Base{
public:
void doIt(int){cout << "Deriver do it";}
};
template<class T,class X>
void TestDoit (X x,T p){
p->doIt(x);
}
int main(){
Derived * p = new Derived();
TestDoit ("abcdefg", p);
}
却不能在VS2008上通过编译。提示如下:
error C2664: “Derived::doIt”: 不能将参数 1 从“const char *”转换为“int”
没有使该转换得以执行的上下文
.\重载.cpp(20): 参见对正在编译的函数 模板 实例化“void TestDoit<Derived*,const char*>(X,T)”的引用
with
[
X=const char *,
T=Derived *
]
我不明白,为何不能通过指针“等价”去匹配“void TestDoit<Base*,int>(X,T)”,却一定要吊死在“void TestDoit<Derived*,const char*>(X,T)”这棵树上?!
请高手赐教!谢谢