
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
c++编程开发语言是程序员需要重点掌握的编程语言之一,而今天我们就一起来了解一下,c++编程开发函数知识都有哪些。
一个没有虚函数的类,它的大小其实就是所有成员变量的大小,此时它就是一个由诸多成员变量组成的结构体,计算大小时同样要按照字节对齐去计算,下面所有计算大小都需按照字节对齐去计算,后面不再说明;
一个没有虚函数的类派生出一个没有虚函数的派生类,那么这个派生类的内存布局就是先基类成员变量,然后派生类成员变量组成的结构体,各成员变量在内存中存储顺序按照声明时的顺序来存放;
一个有虚函数的类,类本身会生成一份虚函数表,这个虚函数表是所有类对象共享的,每个类对象都会在构造时先生成一个虚表指针,指向这个虚函数表,然后才是各个成员变量,所以有虚函数的类对象会比没有虚函数的类多一个虚表指针,虚表指针跟其他指针没有区别,在64位系统中就是占用8个字节;
一个派生类非虚继承于一个有虚函数的类,不论派生类是否有同样的虚函数,它的内存布局都只是在有虚函数的基类基础上增加派生类的成员变量,虚表指针是直接继承基类的,指向基类虚表指针,如果派生类有同样的虚函数,那就覆盖基类虚表中同名函数,如果是派生类独有的虚函数,那就追加在基类虚函数表后面;
一个派生类虚继承于一个有虚函数且没有成员变量的基类,则派生类也不会生成它自己的虚表指针和虚函数表,此时内存布局是先是虚表指针,然后是派生类的成员变量,与4点区别不大;
一个派生类虚继承于一个有虚函数且有成员变量的基类,此时派生类会重新生成它自己的虚表指针和虚函数表,内存布局则是派生类的虚表指针和成员变量在前,基类的虚表指针和成员变量在后;
多重继承时好使用虚继承,否则不只是会产生令人头疼的二义性问题,还会多一份虚基类的拷贝,使用虚继承以后,大家共享虚基类,既节约了空间,又避免了二义性问题。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。