关于类的几点说明
2019-03-13 23:30:43来源:博客园 阅读 ()
类的存储
类可以当成一个结构体。空类与空结构体一样,只有一个字节。原因是为了实例化,摘自网上的引用句子为“一个类能够实例化,编译器就需给它分配内存空间,来指示类实例的地址;这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)”。
类的非虚拟成员函数是不占类的存储空间的,即使继承父类的非虚拟函数也一样,这个与OC的ISA指针是不一样的。
类的非虚拟成员函数跟普通的函数一样是在程序的text区,存在类域与访问权限(public, private...)的限制,属于类层级;而关于非静态成员函数的this指针变量,这个与形参一致,this的静态类型是对应的类指针,指则对应实例对象。类的非虚拟成员函数调用跟普通函数也一样,只是多了一个类域,这个在编译期就已经绑定了。
类的虚拟函数,会让类申请一个指针变量的存储空间;不管是否继承父类,只要有virtual修饰符声明的函数,就会存在一个虚表指针变量(vptr),该指针指向的类的虚拟表(vtable), 而且仅会有一个,不会因为继承或非继承有多个虚拟函数出现多个。虚拟表存储对应同名同参的函数地址,默认都是基类的定义,如果派生类有定义,则对应派生类的地址。这样在多态使用指针或引用调用该函数时,则会根据运行时对应类的定义,是派生的则为派生类定义,基类则为基类的定义。
原文链接:https://www.cnblogs.com/sciapex/p/10524500.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- 关于使用ffmpeg的一些牢骚 2020-05-08
- 关于有趣的windows.h 2020-03-09
- 关于C/C++的各种优化 2020-02-06
- 关于C/C++的各种优化 2020-01-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash