C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C++继承与组合大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

C++继承与组合

继承与组合

继承和组合这两种方式得到的对象的内存结构是完全相同的,但是使用组合时要重写所包含类对象的部分成员函数
例如:

C++继承与组合


当使用组合时,要获取成员对象时如果不重写成员函数,就需要用
m_Cperson.getSex()和m_Cperson.getName来获取成员对象的信息

继承方式和访问控制

C++继承与组合


注:

  • 上述表格中的"不可见"只是编译时检查是否有代码访问父类中的私有成员,无论以何种方式继承,父类中的
    私有数据成员和成员函数在子类中均是不可见的,继承方式是 用来重新指定父类的成员在子类中的访问权限。
  • 如果在继承时没有指明继承的方式,认的是私有继承
  • 如果父类中有修改私有数据成员的非私有成员函数,那么在子类中调用调用父类的这些成员函数是可以改变
    父类的私有数据成员的。
  • 当创建子类对象时,是先创建继承的父类的对象,父类对象放在最前面,这样做一是为了兼容性虑,
    如果以后子类要进行成员扩充,只需要在尾部添加即可,先前的程序不用做改动依旧可以正常访问,这样做
    也有简化了编译器计算父类对象的偏移。
  • 数据隐藏和函数重载的区别:
    数据隐藏:a.不同作用域 b.成员名称相同 c.参数列表相同
    函数重载:a.作用域相同 b.函数名称相同 c.参数列表不同

继承时成员函数的访问方式:

子类对象向父类对象的类型转换:

一个子类对象包含两大部分:子类自己定义的成员和继承的其它父类对象(当然可能还有组合对象),因为子类对
象中含有基类的部分,所以可以把子类对象当成父类对象来使用,还可以将指向父类对象的指针指向子类中的
父类部分。
例如:

     Cstudent * pstu = new Cstudent(“xx”,’f’,7);
     CPerson * pPer = pstu;
     pPer->GetSex();

但是让一个指向子类对象的指针指向父类的对象,是不安全的,可能会发生越界访问造成程序异常,除非可以
确定该父类对象是被包含在子类对象中。

继承时的构造和析构顺序:

  • 构造:先构造父类对象,并且只能在子类构造函数的初始化列表中调用父类的构造函数来初始化父类对象部
    分,在构造子类自己的数据成员
  • 析构:先析构子类的,在析构父类的,因为子类中可能使用了父类的资源

继承与组合同时使用时的构造和析构顺序:

构造时先调用父类的构造函数,在调用成员对象的构造函数,最后调用自己的构造函数,析构时先析构自己, 在调用成员对象的析构函数,最后调用父类的析构函数

大佬总结

以上是大佬教程为你收集整理的C++继承与组合全部内容,希望文章能够帮你解决C++继承与组合所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。