关于虚函数重载后的继承有关问题
关于虚函数重载后的继承问题
以下案例,a类有重载的set函数,b类重写a类的set()的虚函数,但没有重写set(char *)
为何在b类的实例中调用set(char *)函数编译会找不到此函数?
------解决方案--------------------
------解决方案--------------------
b里面根本没有set(char *)函数
------解决方案--------------------
在b中覆盖了其中一个虚函数,另一个也就被隐藏了。 这通常不是问题,因为通常通过基类的指针/引用类
访问的。
------解决方案--------------------
------解决方案--------------------
你看下多态性
以下案例,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;
}
------解决方案--------------------
你看下多态性