首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】继承深度解析:继承方式和菱形虚拟继承的详解

    以上述对象模型为例,在 Teacher 和 Athlete 继承 Person 时采用虚拟继承,即可避免 Student 同时拥有两份 Person 子对象。...\ / Student 如果Student同时继承Teacher和Athlete,他就会有两份Person成员(一次从Teacher一次从Athlete),这样会造成数据冗余...调用Student的Person的成员函数或者访问成员变量的时候,编译器就不知道选择Teacher中的还是Athlete中的那一份,就造成了二义性。...每个通过虚继承的中间类(Teacher、Athlete)内部不直接包含 Person 成员,而是 包含一个指向共享 Person 的指针(实际上是偏移量)。...然后是非虚中间类(Teacher、Athlete)。 最后是最派生类(Student)。 这保证了 虚基类只构造一次,防止重复初始化。

    16100
    领券