淘宝客的网站怎么做开源免费cms可商业用
淘宝客的网站怎么做,开源免费cms可商业用,网络规划设计师2022论文题目,济南手机网站设计菱形继承的问题#xff0c;是由多重继承的父类祖先是同一个父类导致的。如下面的情况#xff1a; 菱形继承#xff0c;会导致同名成员的二义性问题和数据冗余问题#xff0c;用下面的代码来测试#xff1a;
class A
{
public:int _a;
};
// class B : public A
class B :…菱形继承的问题是由多重继承的父类祖先是同一个父类导致的。如下面的情况 菱形继承会导致同名成员的二义性问题和数据冗余问题用下面的代码来测试
class A
{
public:int _a;
};
// class B : public A
class B : public A
{
public:int _b;
};
// class C : public A
class C : public A
{
public:int _c;
};
class D : public B, public C
{
public:int _d;
};
int main()
{D d;d.B::_a 1; d.C::_a 2;d._b 3;d._c 4;d._d 5;return 0;
}
当菱形继承不加处理的话。会导致下面的情况同名成员的二义性问题 这种二义性问题用下面的方式即可解决指定类域 但是还会有下面的数据冗余问题如下成员 _a 占据了两份同样大空间01和02那块内存地址 定义成员 d时分别对 B和C开了一块空间而B和C又要继承类A所以B和C都对 _a 这个成员开了一样的空间。
当_a成员不是很大的时候还好但当有一群_a这样的同名成员的时候内存开销就太大了 虚继承解决了这个问题它是怎么解决的呢
用上面的 ABCD类来举例子。当定义出一个D的对象 d 的时候D中继承了成员 B和 C 的各自的成员变量_b和_c也通过 B和 C继承了 A 的成员 _a虚拟继承会将 _a 放在一个公共的区域通过B和C中指针指向的一张表。这两个指针叫虚基表指针这两个表叫虚基表。虚基表中存的偏移量。通过偏移量可以找到下面的A。 如成员 _b 前面的指针指向的虚基表里存的 16进制的14代表 20 个字节这恰好是_b前面的指针起始位置距离 _a 的距离知道这个距离后访问的时候就能找到 _a 的位置了。 再如 _c 前面的指针指向的虚基表里的 0c 表示十进制的 12这个指针的起始位置和 _a 的距离就是 12访问的时候即可以找到了。 综上所述在虚拟继承的时候可以通过两个类里各自指针指向虚基表里的偏移量来计算同名成员的位置并且内存位置是相同的这也符合我们的认知。
虽然菱形继承有了虚拟继承来解决问题但它的底层极其复杂会对性能造成极大影响
所以虽然能解决但尽量不要设计出菱形继承
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89500.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!