摘要:【笑不死你的程序猿1】序媛小芳最近发现他老公最近有点不对劲,老是很晚回家,心里很纳闷,于是拿出传说中的面相对象编程的大法,针对对象好好编程一番ClassMyHusband{Public:MyHusband();~MyHusband();Public://恨死了有木有????BoolSpendMone...
阅读全文
摘要:指针的大小到底是由谁决定?是多少?应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!但是对不对呢?为什么是这样? 搜了一下相关资料。。。居然发现回答不统一,很多人也同样是糊里糊涂。下面对这个问题做一个系统的整理和分析: 首先,介绍几个基本概念:(主要摘自百度百科) 字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。 一般说来,计算机在同一时间内处理的一组二进制数称为一个计算机的“...
阅读全文
摘要:静态初始化和静态对象的初始化 我虽然不知道是不是一样,看到C++对象模型中书写到有一全局的类对象,在main函数之前,首先系统调用程序的启动函数,也就是RunTime 函数库的startUp函数在程序执行时,系统会先调用Startup,完成函数库初始化、进程信息设立、I/O stream产生,以及对static对象的初始化等动作。然后Startup调用main()函数,把控制权交给main()函数。main()函数执行完毕,控制权交回给Startup,进行反初始化动作。
阅读全文
摘要:今天想起写写二叉树,发现自己好久没有看这个然后秀逗了,这里涉及到的是值传递和地址传递的问题#include using namespace std;#include typedef struct BTNode{int data;BTNode *pLChild,*pRChild;}BTNode; //创建2叉树void CreateBTTree(BTNode*pTreeNode){int input;coutdata=input;coutdatapLChild);CreateBTTree(pTreeNode->pRChild);}}//先序遍历二叉树void XianXuBianLi(BT
阅读全文
摘要:1.程序块要使用缩进的风格2.相对独立的程序块之间、变量说明之后必须加空行3.较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied= stat_poi[index].occupied
阅读全文
摘要: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,其余无
阅读全文
摘要:在初步了解到前面的关于类的第一个函数构造函数之后。关于构造函数的权限和使用方法,作用之后,在这里接下来研究C++的第二个特色那就是虚函数,研究虚函数的作用、内存中分分配状态、继承、安全性等一系列的问题,我们将这些问题一个一个分解开来1.虚函数作用 C++中加入虚函数,是由于多态泛型变成的考虑,函数的重载和虚函数是实现多态的主要途径,实现晚绑定机制,在编译的时候不知道会调用哪个 直到运行的时候才加载正确的地址2.含有虚函数类的内存大小和位置 如果有虚表指针,那么地址应该和对象地址是一致的 如果有虚函数:内存大小=成员变量内存大小+padding大小+虚表个数*4字节(pS:如果从两个类继承,..
阅读全文
摘要:如何计算类对象占用的字节数?一个空类的话1个字节。这是为了保证n个连续空类声明时,变量地址有偏移,防止变量覆盖。非空类的话用关键字sizeof计算。如果手工计算就相当麻烦,光padding就一堆规则了。而且有些额外信息比如虚函数(多个虚函数也只产生一个vptr指针)等等。一个类成员 ,当有虚函数时,有以下成分:各个数据成员,数据对齐产生的间隙,一个虚函数表的 "指针"(无虚不存在)。构造函数不能用 memset(this, 0, sizeof(*this))) 初始化。原因就是每个类里面除了数据成员之外 ,还有一个虚函数表指针 。memcpy另一个同类型类的实例内容过去倒是
阅读全文
摘要:最近偶尔不经意的翻起了曾经的C++ ,它是多么的熟悉又是多么的陌生看到类的第一类函数就是构造函数,看到他的默认类型是public,我在想能不能将其变成private类型,然后想为什么要把变成private,有什么作用么?在以前书中好像曾经提到过类的构造函数好像是公共类型的,一般构造函数虽然可以设置为公共函数但是不可以被外界显示调用,这是一个很奇葩的事吧,我个人认为让构造函数私有化,不能自己自动生成类的对象,主要目的还是让创建对象在类中自己实现,不能在外部实例化,又想了想,这种功能到底会在什么场合会用上呢?而在单实体模式中,我也可以用到私有构造函数publicclassA{privateA(){
阅读全文
摘要:c++classstringserializationbindinghibernate反射这个特性在C++中是没有的。所谓反射,自己的认为就是通过一个名字就可创建、调用、获取信息等一系列的操作,这个在脚本语言里面是比较常见的,COM组件也类似,知道个ID名,就可以做很多的工作了。看看JAVA中的描述:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。JAVA反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对
阅读全文
摘要:C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。堆可以动态地扩展和收缩。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相...
阅读全文