重定义的理解
重定义:
在派生类中可定义与基类成员同名的成员(可以是成员变量也可以是成员函数),此时在派生类中有两个同名的成员。
同名成员:
同名数据成员:同名
同名成员函数:
必须与基类成员函数具有相同原型说明(返回类型、函数名、参数类型与个数),否则为函数重载而非重定义。
在一个类中不能定义两个函数原型说明完全相同的成员函数,重定义成员函数只能出现在具有继承关系的类中(派生类)
重定义成员的访问
同名成员的访问:
在派生类中基类的同名成员被屏蔽。
若在派生类中访问基类的被屏蔽成员,则必须使用作用域运算符::,即在成员前增加类名::以明确指定其所属的类。(跟局部变量的屏蔽类似)
例: 基类名::基类同名数据成员
基类名::基类同名成员函数(实参列表)
//例子
class A{
public:
int a, int b;
int add(){
return a + b;
}
};
class B: public A{
public:
int c, d;
int add(int a, int b){ //这边出现重定义,与父类的成员函数原型相同,函数体可以不同
return a + b;
}
int sum(int a, int b){
return c + d + A::add(a,b); //这边调用父类的成员函数
}
};
int main(){
A c_a;
B c_b;
}