摘要: 转载http://www.cnblogs.com/riskyer/p/3217872.html 所谓虚函数,虚就虚在“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被称为“虚”函数。而什么是动态联编呢? 编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行,这种在程序运行时进行的联编工作被称为动态联编,或动态束定,又叫晚期联编;C++规定:动态联编是在虚函数的支持下... 阅读全文
posted @ 2013-11-12 17:06 z折腾 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 一、编译期与运行期1)常数值在编译时就确定,变量值要到运行时才确定;2)局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定;3)静态变量在用户空间的地址【虚拟地址】编译时就确定,而非静态变量运行时才确定;4)非虚函数的执行编译时就确定,而虚函数的执行运行时才确定;5)直接调用虚函数时,虚函数在虚表中的偏移(或索引)编译时就确定,而通过函数指针调用虚函数时,这个索引值运行时才确定. 阅读全文
posted @ 2013-11-12 16:56 z折腾 阅读(1331) 评论(0) 推荐(0) 编辑
摘要: 转载http://www.blue1000.com/bkhtml/c151/2010-11/69613.htm一个类,有成员变量:静态与非静态之分;而成员函数有三种:静态的、非静态的、虚的。那么这些个东西在内存中到底是如何分配的呢?#include"iostream.h"class CObject{public: static int a; CObject(); ~CObject(); void Fun();private: int m_count; int m_index;};void CObject::Fun(){ cout<<"Fun\n&quo 阅读全文
posted @ 2013-11-12 16:27 z折腾 阅读(1064) 评论(0) 推荐(0) 编辑
摘要: 转载http://www.rosoo.net/a/201203/15889.html一、#pragma pack(push,1)与#pragma pack(1)的区别这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) 作用:C编译器将按照n个字节对齐。#pragma pack () 作用:取消自定义字节对齐方式。#pragma pack (push,1) 作用:是指把原来对齐方式设置压栈,并设新的对齐方... 阅读全文
posted @ 2013-11-12 15:37 z折腾 阅读(579) 评论(0) 推荐(0) 编辑
摘要: 一、注意两点1.C++中struct和class的语法是一致的,但public\private属性相反2.语法成份的嵌套:class嵌套class没有问题,class嵌套struct或者相反都是没有问题C++中struct和class的区别仅仅在于前者默认成员为Public而后者为Private 阅读全文
posted @ 2013-11-12 13:48 z折腾 阅读(798) 评论(0) 推荐(0) 编辑
摘要: 一、LIB文件概念 一个lib文件是obj文件的集合。当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件二、与DLL的区别(1)lib是编译时需要的,dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。(2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和. 阅读全文
posted @ 2013-11-12 09:26 z折腾 阅读(693) 评论(0) 推荐(0) 编辑
摘要: 一动态库的编译文件->新建->项目选择下一步;然后在应用程序类型里选择DLL在test项目的头文件里加上test.h;并添加下列代码在test.cpp里增加如下代码然后F7编译在Debug目录下会生成我们需要用到的是test.dll和test.lib二、动态库的使用把test.h头文件test.lib和test.dll复制到D:\学习工程\动态库的使用\UseDll\UseDll目录下新建工程UseDLL;并在工程里加上test.h文件右键选择UseDll的属性-》连接器在附加库目录选择dll路径然后再输入上指定lib名字然后编译运行就行 阅读全文
posted @ 2013-11-12 09:11 z折腾 阅读(983) 评论(0) 推荐(0) 编辑