Pre:Soldier是Person的子类
一、概念了解
隐藏:子类的某些函数与父类的某些函数重名,此时子类继承了父类的函数,此时可以通过特殊的手段访问父类该函数,这种特性被称为隐藏
Isa:父类可以被子类初始化,但是子类不可以被父类初始化(这就是IsA特性)即solider是person但是person不一定是Solider
二、用例子展现特性
隐藏的方式:(类似于OC的继承)
隐藏的特性存在后,如果子类的成员函数和父类的成员函数只有参数的不同,在逻辑上不能形成重载关系(函数名相同,但是参数个数和排列顺序不同,从这里可以看出,父子之间不是重载,而是隐藏),必须使用::来访问父类
Int test(void){
Soldier soldier;
soldier.play();
soldier.Person::play();
return 0;
}
Isa的方式:(类似于OC的多态,子类可以在父类的基础上扩充,具有独特性,白马非马)
int test(void){
Soldier s1;
Person p1 = s1;
Person *p2 = &s1;
// 以下是错误的
S1 = p1;
Solider *s2 = &p1;
return 0;
}