c++继承全解,今天我们从父类开始,讲一讲子类是怎么把这些东西据为己有的。

C++继承全解,今天我们从父类开始,讲一讲子类是怎么把这些东西据为己有的。C++里这一招代码复用简直就是个神器,你先写个基类(父类),再让派生类(子类)站上去,把大家都有的属性一次性写好,再把各自不同的个性慢慢加上去。这样代码就像大树一样一层层长出来,既省力看着又舒服。 比如说学校里有Student、Teacher还有Manager这三类人,他们都有姓名、性别和工号这些共同属性,不过各自还有专业、课程和部门之类的私货。如果每次都给每类人重新写一套姓名、性别和工号,那可真是又傻又臭。这时候继承就派上用场了!先写个People类把大家共有的部分放进去,Student、Teacher还有Manager这些子类去继承它一下,瞬间就没那么多重复的代码了。 C++还给了我们三种“站队”的方式,选错了可就麻烦了。公共继承是最常用的一种方式,子类对外的接口就跟父类一样大方公开。保护继承适合做内部复用,对外的接口会少一点。私有继承就更隐蔽了,对外完全隐藏父类的痕迹。 多继承嘛……听起来挺酷的一次继承多个父类吧?但这也容易引发问题。要是两个父类都有同名成员,子类就得自己去区分到底用哪一个。解决办法就是用作用域符号::明确指名道姓。能用单继承就别硬凑多继承了,维护起来真的要人命。 切片就是把派生类对象直接塞进基类变量、指针或者引用里的操作。编译器默认会这么干让你方便一点,但也很危险——派生类特有的那部分会被切掉。记住这三句话:派生变成基类安全又常用;基类变回去想都别想;强行把基类指针转成派生类对象之前得先确认它真的是指向派生对象。 Student s这个对象直接给People p1赋值是安全的切片操作;给People p2赋值的时候其实是个指针指向基类的那一部分;People& p3绑定到s上也是安全的引用操作。反过来就不行啦!s赋值给p1是错的! Student sp这时候强制转型回p2之前必须确保它真的指向的是Student对象才行。 sp->_major = "计算机科学与技术";这样操作子类独有的属性才安全啊! 菱形继承……听起来挺唬人吧?其实就是因为有“祖父→父→子”这种三层结构的数据恰好同名了就会出二义性问题。比如植物→水杉、柳树;杨柳→水杉、柳树……结果杨柳手里就有两份植物数据却只能用一份。解决方法就是用作用域解析或者在祖父类前加个virtual让它只存在一份副本就行了。