1.重载关系:
一组函数要重载,必须处在同一个作用域,而且函数名相同,参数列表不同. #1 与 #2 就是重载关系
2.隐藏关系:(作用域的隐藏)
在继承结构中,派生类的同名成员函数,把基类的同名成员函数(非虚函数)给隐藏掉了 #1和#3 #2和#3 都是隐藏关系
如果想调用基类同名成员函数,就得添加基类作用域 Base::
3.覆盖关系:
虚函数表中虚函数地址的覆盖;
如果派生类中的方法,和基类继承来的某个方法,返回值、函数名、参数列表都相同,而且基类的方法是virtual虚函数,那么派生类的这个方法,自动处理成虚函数,它们之间成为覆盖关系;
重载和隐藏示例
class Base
{
public:
Base(int data = 10) : ma(data) {}
void show() {cout << "Base::show()" << endl;} // #1
void show(int) {cout << "Base::show(int)" << endl;} // #2
protected:
int ma;
};
class Derive : public Base
{
public:
Derive(int data = 20) : Base(data),mb(data) {}
void show() {cout << "Derive::show()" << endl;} // #3
private:
int mb;
};
覆盖示例
class Base
{
public:
Base(int data = 10) : ma(data) {}
virtual void show() {cout << "Base::show()" << endl;} // #1
void show(int) {cout << "Base::show(int)" << endl;} // #2
protected:
int ma;
};
class Derive : public Base
{
public:
Derive(int data = 20) : Base(data),mb(data) {}
void show() {cout << "Derive::show()" << endl;} // #3
private:
int mb;
};