20170121C++阶段班05_STL_02inheritance补充

来源:互联网 发布:如何申请网络域名 编辑:程序博客网 时间:2024/05/20 16:37

inheritance补充讲解:

1:为什么要有继承,继承的用处:

    1:可以让我们实现代码的重用。

        代码重用的方式

        1:copy,直接copy一份。

        2:组合:是C++语言里面特有的,就是类里面使用其他类当作参数。C++的设计哲学就是不要反复地去造轮子,能够用已有的就可以用。通过组合可以使用很多,达到代码重用的目的。他的关系是HasA的关系。

        3:继承:他是继承的方式,可以重用积累的一些数据和方法。关系是IsA的关系。

2:其他注意点:

    1:继承里面有两个函数是无法被继承的:构造析构,析构函数。

    2:派生类继承于基类的数据不能在初始化列表里面来操作,因为初始化列表的时候,这几个数据还没有,只能在构造函数里面可以操作。但是派生类自己的数据还是可以在初始化列表里面来初始化。

    3:如果基类没有不用传参的构造函数,派生类构造函数可以显示的调用积累的构造函数,但是派生类自己的数据还是要初始化(派生类对象调用的时候会默认调用本类数据,如果没初始化可能导致后面的错误),可以在初始化列表里面做,也可以在构造函数里面做。

    4:数据成员的重定义并非是覆盖,这时他们都存在,在派生类对象里面都占用空间。数据从定义本身就是不好的,容易出问题的。

3:方法的重写:

    1:方法重写的标准是,只要函数名相同就是重写,重写后对象调用默认调用本类的方法,如果方法不合适,他也不会自动调用基类可能合适的重写的方法。
    2:方法重写后,用那个类调用这个方法就会默认使用哪个类的方法。如果还是需要访问分i累的方法,那么可以通过域作用符来指定调用那一个重载的函数。

4:重载,重定义,覆盖

    1:overload:重载:必要要作用域一样才构成重载。是多态里面的一种手段,其实是:多种形态,结果一致!
    2:overwrite:重写:重定义:子类基类之间,只要函数名相同就构成重定义。
    3:overrride:覆盖:虚函数相关。

5:继承:

    1:C++类里面构造函数,析构函数是无法被继承的。operator=是可以被继承的。
    2:public继承的时候,传递参数的时候就可以派生类转换成基类。但这回产生对象切割,会丢失一些特性。
#include <iostream>class A{public:};class B:public A{public:};int main(){A *pa = new A;B *pb = new B;A a;B b;pa = pb;//派生类向基类转换,会产生对象切割,会丢失一些特性。//pb = pa;//非法的,但是可以使用reinterpret_cast<>()来进行强制转换。但是很危险。a = b;//b = a;//非法的return 0;}




1 0
原创粉丝点击