多继承下两个以上基类有相同名称的成员函数时,派生类对象引用该名称函数时,若不做任何处理,将不能正常工作。其原因在于,重载规则不适用于跨越多个类的情况。有两种基本的方法:一是使用时明确指出用到哪个基类的同名函数;二是用using声明把不同基类的同名函数引入到一个公共作用域中。
第一种方法举例。
class A {
public:
int func ( int );
void func ( char );
// ...
};
class B
当派生类从两个或更多基类继承时,如果基类中有同名函数,会导致调用歧义。解决办法包括:1) 在调用时指定基类作用域,如`A::func()`或`B::func()`;2) 使用`using`声明引入基类同名函数到派生类作用域,使得重载解析生效。这两种方法不影响虚函数的覆盖机制。
多继承下两个以上基类有相同名称的成员函数时,派生类对象引用该名称函数时,若不做任何处理,将不能正常工作。其原因在于,重载规则不适用于跨越多个类的情况。有两种基本的方法:一是使用时明确指出用到哪个基类的同名函数;二是用using声明把不同基类的同名函数引入到一个公共作用域中。
第一种方法举例。
class A {
public:
int func ( int );
void func ( char );
// ...
};
class B

被折叠的 条评论
为什么被折叠?