NN的,绝对通不过编译!函数名相同而形参不同,属函数重载。而pt声明成一个A类的指针,自然调用virtual int func(int i),但是对其引入char* 形参&temp,就会报错。
经专业鉴定,这个是不能通过编译的. 1>d:\我的文档\visual studio 2005\projects\test\test\test.cpp(20) : error C2664: 'A::func' : cannot convert parameter 1 from 'char *__w64 ' to 'int' 从这个错误就可以看出它根本就虚函数.对于A的对象还说,它只有一个函数.也没有重载.对于B来说,是函数重载.
如果程序改写一下,初始化是怎么调用func函数的,还请各位大神帮忙解释下,最近在学习C++ class A { public: virtual int func(int i); };class B : public A { public: virtual int func(int* c); };int main(void) { char temp = 'c'; A *pt = new B; pt -> func(&temp); return 0; }
1>d:\我的文档\visual studio 2005\projects\test\test\test.cpp(20) : error C2664: 'A::func' : cannot convert parameter 1 from 'char *__w64 ' to 'int'
从这个错误就可以看出它根本就虚函数.对于A的对象还说,它只有一个函数.也没有重载.对于B来说,是函数重载.
真理自在人心。
但是题目本身确实有问题,一个是在大多数编译器中char*确实不能隐身式转换为int,当然编译会出错
并且两个虚函数都只有声明没有定义,链接器也会出错
class A
{
public:
virtual int func(int i);
};class B : public A
{
public:
virtual int func(int* c);
};int main(void)
{
char temp = 'c';
A *pt = new B; pt -> func(&temp); return 0;
}