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; }
相关文章推荐
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20170121C++阶段班05_STL_02inheritance补充
- 20161220C++阶段班02_C to C++
- [C++ 从入门到放弃-02]C++STL之string
- 20161221C++阶段班02_C to C++_02重载/默认实参/inline/类型转换
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20170114C++阶段班04_STL_01string
- 20170116C++阶段班04_STL_02vector
- 20170118C++阶段班04_STL_03MyString练习讲解
- 20170119C++阶段班04_STL_04MyVector练习讲解
- 20161220C++阶段班02_C to C++
- 20161221C++阶段班02_C to C++_02重载/默认实参/inline/类型转换
- 20161224C++阶段班02_C to C++_03引用/指针/引用传参和返回值
- 20170114C++阶段班04_STL_01string