C++语言程序设计

我们看看下面的实例。

| 例11-6

// 在派生类中，隐藏重载的函数名
#include <iostream.h>
class Base
{
public:
int f() const {
cout << "Base::f()\n";
return 1;
}
int f(char *) const { return 1; }
void g() {}
};

class Derived1 : public Base
{
public:
void g() const {}
};

class Derived2 : public Base
{
public:
// 函数f被重定义
int f() const {
cout << "Derived2::f()\n";
return 2;
}
};

class Derived3 : public Base
{
public:
// 改变函数f的返回类型
void f() const { cout << "Derived3::f()\n"; }
};

class Derived4 : public Base
{
public:
// 改变函数f的参数表
int f(int) const {
cout << "Derived4::f()\n";
return 4;
}
};

void main()
{
char s[]="hello";
Derived1 d1;
int x = d1.f();
d1.f(s);
Derived2 d2;
x = d2.f();
//! d2.f(s); // 基类带char *参数的成员函数f被隐藏
Derived3 d3;
//! x = d3.f(); // 基类带返回int类型的成员函数f被隐藏
Derived4 d4;
//! x = d4.f(); // 基类带成员函数f被隐藏
x = d4.f(1);
}