读书人

关于虚函数重载后的继承有关问题

发布时间: 2013-03-21 10:08:17 作者: rapoo

关于虚函数重载后的继承问题

以下案例,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;
}

[解决办法]
引用:
引用:
在b中覆盖了其中一个虚函数,另一个也就被隐藏了。 这通常不是问题,因为通常通过基类的指针/引用类
访问的。
C/C++ code?123b obj;a& base = obj;base.set("");
请问一下,为何会覆盖,不覆盖的话逻辑上会有什么问题么?
你看下多态性

读书人网 >C++

热点推荐