关于虚函数重载后的继承问题
以下案例,a类有重载的set函数,b类重写a类的set()的虚函数,但没有重写set(char *)
为何在b类的实例中调用set(char *)函数编译会找不到此函数?
#include "stdafx.h"
class a
{
public:
virtual int set();
virtual int set(char *);
};
class b
{
public:
virtual int set();
};
int a::set()
{
return 0;
}
int a::set(char *)
{
return 0;
}
int b::set()
{
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
b bb;
bb.set("");
return 0;
}
[解决办法]
class a
{
public:
virtual int set();
virtual int set(char *);
};
class b : public a
{
public:
using a::set;
virtual int set();
};
int a::set()
{
return 0;
}
int a::set(char *)
{
return 0;
}
int b::set()
{
return 0;
}
int main()
{
b bb;
bb.set("");
return 0;
}
[解决办法]
b里面根本没有set(char *)函数
[解决办法]
在b中覆盖了其中一个虚函数,另一个也就被隐藏了。 这通常不是问题,因为通常通过基类的指针/引用类
访问的。
b obj;
a& base = obj;
base.set("");
[解决办法]
class a
{
public:
virtual int set();
virtual int set(char *);
};
class b : public a
{
public:
int set();
int set(char *);
};
int a::set()
{
return 0;
}
int a::set(char *)
{
return 0;
}
int b::set()
{
return 0;
}
int b::set(char *)
{
return 0;
}
int main()
{
b bb;
bb.set("");
return 0;
}
[解决办法]
你看下多态性