#include<iostream>
using namespace std;
//基类Base
class Base {
public:
void func();
void func(int);
};
void Base::func() { cout << "Base::func()" << endl; }
void Base::func(int a) { cout << "Base::func(int)" << endl; }
//派生类Derived
class Derived : public Base {
public:
void func(char*);
void func(bool);
};
void Derived::func(char* str) { cout << "Derived::func(char *)" << endl; }
void Derived::func(bool is) { cout << "Derived::func(char *)" << endl; }
int main() {
Derived d;
d.func("c.biancheng.net");
d.func(true);
//d.func(); //compile error
d.func(10); //compile error
d.Base::func();
d.Base::func(100);
return 0;
}
运行结果为什么是
【以下回答由 GPT 生成】
问题的原因是派生类Derived中的函数func与基类Base中的函数func发生了函数重名问题。在派生类中使用一个与基类中同名的函数时,派生类中同名的函数会隐藏基类中的同名函数。因此,在派生类中调用同名函数时,会直接调用派生类中的该函数。
解决这个问题的方法是使用using语句来引入基类的同名函数,使得它们在派生类中可见。具体的步骤如下:
class Derived : public Base {
public:
using Base::func;
void func(char*);
void func(bool);
};
int main() {
Derived d;
d.func("c.biancheng.net");
d.func(true);
d.func(); // 现在可以正常调用基类中的同名函数了
d.func(10); // 现在可以正常调用基类中的同名函数了
d.Base::func();
d.Base::func(100);
return 0;
}
这样就能够正确地调用派生类和基类中的同名函数了。
运行结果应该是:
Derived::func(char *)
Derived::func(bool)
Base::func()
Base::func(int)
Base::func()
Base::func(int)