1、父子间的冲突
1.1、子类可以定义父类中的同名成员
1.2、
子类中的成员将
隐藏
父类中的同名成员(同名覆盖)
1.3、
父类中的同名成员
依然存在于子类中
1.4、
通过
作用域分辨符
(
::
)访问父类中的同名成员
/**************** 父子间的函数重载 及同名成员变量 ************/
#include <iostream>
#include <string>
using namespace std;
class Parent
{
public:
int mi;
void add(int v)
{
mi += v;
}
void add(int a, int b) //Parent中的两个add构成重载关系,同一作用域。
{
mi += (a+b);
}
};
/*
1。child中的2个add函数构成了重载关系
2.因child出现了以add命名的函数(只要有1个与父类同名的函数),所以父类中所有名为add的函数,在子类中都会被隐藏起来。
*/
class Child : public Parent
{
public:
int mi;
void add(int v)
{
mi += v;
}
void add(int x, int y, int z)
{
mi += (x + y + z);
}
};
int main()
{
Child c;
c.mi = 100;
c.Parent::mi = 1000; //父类中的mi ,被隐藏, 须加作用域分辨符
cout << "c.mi = " << c.mi << endl; //100
cout << "c.Parent::mi = " << c.Parent::mi << endl;
c.add(1);
c.Parent::add(2, 3);//父类的add, 在子类中被隐藏,须加作用域访问符。
c.Parent::add(2);
c.add(4, 5, 6);
cout << endl;
cout << "c.mi = " << c.mi << endl; //116
cout << "c.Parent::mi = " << c.Parent::mi << endl; //1007
return 0;
}
2、再论重载
2.1、重载函数的本质为多个不同的函数
2.2、函数名和参数列表是唯一的标识
2.3、函数重载必须发生在同一个作用域中
3、父子间的函数重载
3.1、子类中的函数将隐藏父类的同名函数
3.2、子类无法重载父类中的成员函数
3.3、使用作用域分辨符访问父类中的同名函数
3.4、子类可以定义父类中完全相同的成员函数
4、 小结
4.1、子类可以定义父类中的同名成员
4.2、子类中的成员将隐藏父类中的同名成员
4.3、子类和父类中的函数不构成重载关系
4.4、子类可以定义父类中完全相同的成员函数
4.5、使用作用域分辨符访问父类中的同名成员