c++中关于函数重载加类继承问题
在基类A中,重载了startwith方法,然后在子类B中重写了其中一个startwith(int)方法
使用子类B调用不了 startwith(char*)方法
代码如下:
class A
{
virtual void startwith(int a){}
virtual void startwith(char* a){}
};
class B:public A
{
void startwith(char* a){}
};
int main()
{
B b;
//调用A startwith(int a)
//编译错误,无法将int 类型转换为 char*
b.startwith(1);
}
有哪位大神,可以从c++类对象模型上讲讲这是为什么?
[解决办法]
/*
1:首先类A成的成员函数均是私有成员函数(你未加访问权限,均是默认私有)
2:你的类B中void startwith(char* a){}是私有成员函数,main中的b.startWith是访问不到的
3:类B中的同名函数会覆盖掉所有类A中的同名函数,从B来看会只看到故编译错误startwith(char* a),无法将int类型转换为 char*
4:对像模型角度来讲调用b.startwith(1),底层实现是void _startwith_xx(class B, char *a)
*/
class A
{
public:
void startwith(int a){}
void startwith(char* a){}
};
class B:public A
{
public:
void startwith(char* a){}
};
int main()
{
B b;
//调用A startwith(int a)
//编译错误,无法将int 类型转换为 char*
b.A::startwith(1);
b.startwith(reinterpret_cast<char*>(1));
return 0;
}