C++ 继承
林慢慢脑瓜子嗡嗡的 人气:01.继承的概念
继承,是面向对象的三大特性之一。继承可以理解成是类级别的一个复用,它允许我们在原有类的基础上进行扩展,增加新的功能。
当创建一个类时,我们可以继承一个已有类的成员和方法,并且在原有的基础上进行提升,这个被继承的类叫做基类,而这个继承后新建的类叫做派生类。
用法如下:
class [派生类名] : [继承类型] [基类名]
例如:
class Person { public: string _name; int _age; }; class Student : public Person { protected: string _stuNum; };
这里的派生类Student就复用了Person的方法和成员,并在此基础上扩展补充。
2.继承方式
继承的方式和类的访问限定符一样,分为public(公有继承),private(私有继承), protected(保护继承)三种。
不同的继承方式,在派生类中继承下来的基类成员的访问权限也不一样。
基类的其他成员在子类的访问方式 = Min(成员在基类的访问限定符,继承方式)
备注:
1.在实际运用中一般使用都是public继承,几乎很少使用protetced/private继承,也不提倡使用protetced/private继承,因为protetced/private继承下来的成员都只能 在派生类的类里面使用,实际中扩展维护性不强。
2.使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。
3.基类与派生类的赋值转换
派生类可以赋值给基类的对象、指针或者引用,这样的赋值也叫做对象切割。
例如上面的Person类和Student类
这种赋值只能是派生类赋给基类(但需要割掉多出来的成员例如_ stuID),而基类对象不能赋给派生类。
基类的指针可以强制类型转换赋值给派生类的指针, 如:
int main() { Person p1; Student s1; Person* hPtr1 = &s1;//指向派生类对象 Person* hPtr2 = &p1;//指向基类对象 Student* pPtr = (Student*)hPtr1;//没问题 Student* pPtr = (Student*)hPtr2;//有时候没有问题,但是会存在越界风险 return 0; }
小结:
1.派生类可以赋值给基类的对象、指针或者引用
2.基类对象不能赋值给派生类对象
3.基类的指针可以通过强制类型转换赋值给派生类的指针。**
加载全部内容