2013年10月14日

C++ 温故而知新(三)

摘要: inline, static, constructor三种函数都不能带有virtual关键字。inline是编译时展开,必须有实体;static属于class自己的,也必须有实体;virtual函数基于vtable(内存空间),constructor函数如果是virtual的,调用时也需要根据vtable寻找,但是constructor是virtual的情况下是找不到的,因为constructor自己本身都不存在了,创建不到class的实例,没有实例,class的成员(除了public static/protected static for friend class/functions,其余无 阅读全文

posted @ 2013-10-14 15:19 AAAAAApple 阅读(174) 评论(0) 推荐(0)

C++温故而知新(二)

摘要: 在初步了解到前面的关于类的第一个函数构造函数之后。关于构造函数的权限和使用方法,作用之后,在这里接下来研究C++的第二个特色那就是虚函数,研究虚函数的作用、内存中分分配状态、继承、安全性等一系列的问题,我们将这些问题一个一个分解开来1.虚函数作用 C++中加入虚函数,是由于多态泛型变成的考虑,函数的重载和虚函数是实现多态的主要途径,实现晚绑定机制,在编译的时候不知道会调用哪个 直到运行的时候才加载正确的地址2.含有虚函数类的内存大小和位置 如果有虚表指针,那么地址应该和对象地址是一致的 如果有虚函数:内存大小=成员变量内存大小+padding大小+虚表个数*4字节(pS:如果从两个类继承,.. 阅读全文

posted @ 2013-10-14 10:27 AAAAAApple 阅读(174) 评论(0) 推荐(0)

C++的内存分布(一)转

摘要: 如何计算类对象占用的字节数?一个空类的话1个字节。这是为了保证n个连续空类声明时,变量地址有偏移,防止变量覆盖。非空类的话用关键字sizeof计算。如果手工计算就相当麻烦,光padding就一堆规则了。而且有些额外信息比如虚函数(多个虚函数也只产生一个vptr指针)等等。一个类成员 ,当有虚函数时,有以下成分:各个数据成员,数据对齐产生的间隙,一个虚函数表的 "指针"(无虚不存在)。构造函数不能用 memset(this, 0, sizeof(*this))) 初始化。原因就是每个类里面除了数据成员之外 ,还有一个虚函数表指针 。memcpy另一个同类型类的实例内容过去倒是 阅读全文

posted @ 2013-10-14 09:24 AAAAAApple 阅读(243) 评论(0) 推荐(0)

C++ 温故而知新(一)

摘要: 最近偶尔不经意的翻起了曾经的C++ ,它是多么的熟悉又是多么的陌生看到类的第一类函数就是构造函数,看到他的默认类型是public,我在想能不能将其变成private类型,然后想为什么要把变成private,有什么作用么?在以前书中好像曾经提到过类的构造函数好像是公共类型的,一般构造函数虽然可以设置为公共函数但是不可以被外界显示调用,这是一个很奇葩的事吧,我个人认为让构造函数私有化,不能自己自动生成类的对象,主要目的还是让创建对象在类中自己实现,不能在外部实例化,又想了想,这种功能到底会在什么场合会用上呢?而在单实体模式中,我也可以用到私有构造函数publicclassA{privateA(){ 阅读全文

posted @ 2013-10-14 09:02 AAAAAApple 阅读(171) 评论(0) 推荐(0)

导航