您的位置:首页 > 编程语言 > C语言/C++

20170121C++阶段班05_STL_02inheritance补充

2017-01-21 18:27 232 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息