理论知识
1,重载关系
一组函数要重载必须要处于同一作用域当中,而且函数名字相同,参数列表不同。
3,覆盖关系
基类和派生类的方法,返回值、函数名以及参数列表都相同,而且基类的方法是虚函数,
那么派生类的方法就自动处理成虚函数,它们之间成为覆盖关系
2,隐藏关系
在继承结构中,派生类的同名成员 把基类的同名成员给隐藏调用了。
例子
第一个
#include<iostream>
using namespace std;
class Base
{
public:
Base(int data = 5) :mbase(data),a(data) { cout << "Base()" << endl; }
private:
int mbase;
protected:
int a;
};
class Derived :public Base
{
public:
Derived(int data = 10) :Base(data), mderived(data) { cout << "Derived()" << endl; }
void show() { cout << a << endl; }
private:
int mderived;
protected:
//int a;
};
int main()
{
Derived dd(20);
dd.show();
}
此时我们取消派生类Derived访问限定符protected下ma的注释后:
派生类中为初始化的成员变量ma将基类中的ma覆盖掉了。
第二个
#include<iostream>
using namespace std;
class Base
{
public:
Base(int data = 5) :mbase(data) { }
~Base() { }
void show() { cout << "Base::show()" << endl; }
void show(int) { cout << "Base::show(int)" << endl; }
private:
int mbase;
};
class Derived :public Base
{
public:
Derived(int data = 10) :Base(data), mderived(data) { }
~Derived() { }
void show() { cout << "Derived::show()" << endl; }
private:
int mderived;
};
int main()
{
Derived dd(20);
dd.show();
//dd.show(1);
dd.Base::show(1);
}
上例中的派生类Derived中的show方法将Base中show方法覆盖掉了。故我们在基类中调用含有整形参数的show的方法会报错(不接受一个参数)。但是我们可以指定show方法的作用域在Base中也可以访问基类Base中show带有一个int参数的方法。