• 联系我们
  • 地址:湖北武汉三环科技园
  • 电话:159116031100
  • 传真:027-68834628
  • 邮箱:mmheng@foxmail.com
  • 当前所在位置:首页 - c++培训
  • c语言几种不同C语言继承方式简介
  •   C++编程语言功能强大,可以对多种程序设计风格提高支持。其中就包括面向对象的各种特性。我们在这里先为大家一下C++继承的一些基本概念。C++继承方式分为两种,普通继承和虚拟继承(virtual)。具体的继承又根据父类中的函数是否virtual而不同。

      下面就单继承分为几种情况阐述:

      C++继承方式1.普通继承+父类无virtual函数

      若子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(没有vptr),子类的元素(没有vptr)。

      若子类有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(没有vptr),子类的元素(包含vptr,指向vtable.)

      C++继承方式2. 普通继承+父类有virtual函数

      不管子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(包含vptr), 子类的元素。

      如果子类有新定义的virtual函数,那么在父类的vptr(也就是第一个vptr)对应的vtable中添加一个函数指针。

      C++继承方式3.virtual继承

      若子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 子类的元素(有vptr),虚基类的元素。为什么这里会出现vptr,因为虚基类派生出来的类中,虚类的对象不在固定(猜测应该是在内存的尾部),需 要一个中介才能访问虚类的对象。所以虽然没有virtual函数,子类也需要有一个vptr,对应的vtable中需要有一项指向 虚基类。

      若子类有新定义virtual函数 此时子类的布局是与没有定义新virtual函数内存布局一致。但是在vtable中会多出新增的虚函数的指针。

      C++继承方式4.多重继承

      此时子类的布局是 : 由低地址-高地址 为父类p1的元素(p1按照实际情况确定元素中是否包含vptr), 父类p2的元素(p2按照实际情况确定元素中是否包含vptr),子类的元素。

      如果所有父类都没有vptr,那么如果子类定义了新的virtual function,那么子类的元素中会有vptr,对应的vtable会有相应的函数指针。

      如果有的父类存在vptr,我感觉如果子类定义的新的virtual function,会加在第一个有vptr的父类的vtable中。因为子类分配的空间显示并没有新增加一个4字节的指针空间。

      在如今这个信息爆炸的时代里,每天都会有数不清的新闻通过各种渠道涌到我们面前,而真正有价值的应该进入我们心里的,却很可能随着日历牌的翻动被我们忽略。作为对一周新闻进行回顾的《比特网新闻中心每周热点推荐》,就是要告诉您过去的七天都发生了哪些新闻,更希望和您一起,站在七天的高度来看待过去一周的新闻

      业内首个只为报道数据中心资讯内容的专业频道,是为数据中心用户及厂商而建设的专业平台。以数据中心专业技术内容为核心,贯穿新鲜资讯、技巧方法和用户案例等高附加值内容。以为网友提供最具实用价值的信息为原则,以成为用户最信赖的行业专家为目标,打造高时效、高品质、高前瞻的最全威频道。企业数据中心热点播报,为您精心奉上过去一周数据中心最精彩、权威资讯_chinabyte比特网。

      就服务器和数据中心领域的产业动态、技术热点、热产品、实用技巧,向企业CIO/CTO、IT管理层、技术人员提供一周精选套餐,为数据中心决策者、使用者提供一份服务器行业以及数据中心领域最新动态及产品应用的技术套餐。

      C++编程语言功能强大,可以对多种程序设计风格提高支持。其中就包括面向对象的各种特性。我们在这里先为大家一下C++继承的一些基本概念。C++继承方式分为两种,普通继承和虚拟继承(virtual)。具体的继承又根据父类中的函数是否virtual而不同。

      下面就单继承分为几种情况阐述:

      C++继承方式1.普通继承+父类无virtual函数

      若子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(没有vptr),子类的元素(没有vptr)。

      若子类有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(没有vptr),子类的元素(包含vptr,指向vtable.)

      C++继承方式2. 普通继承+父类有virtual函数

      不管子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 为父类的元素(包含vptr), 子类的元素。

      如果子类有新定义的virtual函数,那么在父类的vptr(也就是第一个vptr)对应的vtable中添加一个函数指针。

      C++继承方式3.virtual继承

      若子类没有新定义virtual函数 此时子类的布局是 : 由低地址-高地址 子类的元素(有vptr),虚基类的元素。为什么这里会出现vptr,因为虚基类派生出来的类中,虚类的对象不在固定(猜测应该是在内存的尾部),需 要一个中介才能访问虚类的对象。所以虽然没有virtual函数,子类也需要有一个vptr,对应的vtable中需要有一项指向 虚基类。

      若子类有新定义virtual函数 此时子类的布局是与没有定义新virtual函数内存布局一致。但是在vtable中会多出新增的虚函数的指针。

      C++继承方式4.多重继承

      此时子类的布局是 : 由低地址-高地址 为父类p1的元素(p1按照实际情况确定元素中是否包含vptr), 父类p2的元素(p2按照实际情况确定元素中是否包含vptr),子类的元素。

      如果所有父类都没有vptr,那么如果子类定义了新的virtual function,那么子类的元素中会有vptr,对应的vtable会有相应的函数指针。

      如果有的父类存在vptr,我感觉如果子类定义的新的virtual function,会加在第一个有vptr的父类的vtable中。因为子类分配的空间显示并没有新增加一个4字节的指针空间。

      在如今这个信息爆炸的时代里,每天都会有数不清的新闻通过各种渠道涌到我们面前,而真正有价值的应该进入我们心里的,却很可能随着日历牌的翻动被我们忽略。作为对一周新闻进行回顾的《比特网新闻中心每周热点推荐》,就是要告诉您过去的七天都发生了哪些新闻,更希望和您一起,站在七天的高度来看待过去一周的新闻

      业内首个只为报道数据中心资讯内容的专业频道,是为数据中心用户及厂商而建设的专业平台。以数据中心专业技术内容为核心,贯穿新鲜资讯、技巧方法和用户案例等高附加值内容。以为网友提供最具实用价值的信息为原则,以成为用户最信赖的行业专家为目标,打造高时效、高品质、高前瞻的最全威频道。企业数据中心热点播报,为您精心奉上过去一周数据中心最精彩、权威资讯_chinabyte比特网。

      就服务器和数据中心领域的产业动态、技术热点、热产品、实用技巧,向企业CIO/CTO、IT管理层、技术人员提供一周精选套餐,为数据中心决策者、使用者提供一份服务器行业以及数据中心领域最新动态及产品应用的技术套餐。