C++类内存布局图(成员函数和成员变量分开讨论)
摘要:一、成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息。 成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对应的对象上。对象调用成员函数时,早在编译期间,编译器就可以确定这些函数的地址,并通过传入this指针
阅读全文
【详解】消息队列和线程关系
摘要:1.进程-线程-消息队列简单的来说,什么是进程?什么是线程?打个比方,你的程序要执行,操作系统就会把你的exe文件加载到内存中,那就生成一个进程了(当然还包含分配到的资源等);对于线程,你可以理解成是一个程序里的不同部分,这有点类似函数,所不同的是各个线程是同时执行的。例如,你的主线程创建了另一个副...
阅读全文
VC中预处理指令与宏定义详解
摘要:刚接触到MFC编程的人往往会被MFC 向导生成的各种宏定义和预处理指令所吓倒,但是预处理和宏定义又是C语言的一个强大工具。使用它们可以进行简单的源代码控制,版本控制,预警或者完成一些特殊的功能。 一个经典的例子 使用预处理与宏定义最经典的例子莫过于加在一个头文件中以避免头文件被两次编译。试想这种...
阅读全文
使用开源工具MonoDevelop开发GTK#图形界面
摘要:转自:http://developer.51cto.com/art/201011/235040.htmMono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏,中文材料更是屈指可数。虽然Mono与.net很多类库都是通用的,但Mono仍然有为数不少的扩充类库,...
阅读全文
C++使用POST方法向网页提交数据-----C++发送HTTP数据获取Google天气预报
摘要:例1:C++使用POST方法向网页提交数据 转自:http://www.it165.net/pro/html/201208/3534.html在C++中可以使用POST方法向网页中提交数据,这样就可以向类似论坛这样的网站注入垃圾帖子了。我的博客常常有海量的垃圾评论,大为恼火。为了不给其他人惹麻烦,就...
阅读全文
详解模块定义(.def)文件
摘要:一个完整的Windows应用程序(C++程序)通常由五种类型的文件组成:源程序文件,头文件,资源描述文件,项目文件,模块定义文件。本文主要讲解模块定义文件。模块定义(.def)文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成DLL时,.def文件最有用。由于存在可代替模块定义语句使用的链接器选项,通常不需要.def文件。也可以将__declspec(dllexport)用作指定导出函数的手段。 在链接器阶段可以使用 /DEF(指定模块定义文件)链接器选项调用 .def 文件。 如果生成的 .exe 文件没有导出,使用 .def 文件将使输出文件较大并降低加载速度。 ...
阅读全文
动态链接库编程--个人笔记
摘要:1. 动态链接库概述 (静态库和动态库、动态链接库的加载)概述: Windows API中的所有函数都包含在DLL中.其中有三个最重要的DLL: Kernel32.dll,它包含用于管理内存、进程和线程的各个函数; Uer32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数; GDI32.dll,它包含用于画图和显示文本的各个函数.2.静态库和动态库 静态库:函数和数据被编译进一个二进制文件(通常扩展名为.LIB).在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE 文件),发
阅读全文
c++父类指针强制转为子类指针后的测试(帮助理解指针访问成员的本质)(反多态)
摘要:看下面例子:#include "stdafx.h"#include class A { //父类public: void f() //普通函数 { std::coutm=20; }};int _tmain(int argc, _TCHAR* argv[]){ A *pa = new A(); //只实例化一个父类的对象,但下面要当作子类用 B *pb = (B *)pa; //用强制类型转换,把父类指针转化为子类指针,用这个子类指针访问子类的成员 pb->f(); //覆盖时,调用的是子类的函数 pb->vf(); //虚函数时,调用的是父类的函数,是因为虚函数
阅读全文
C++难点的一些总结
摘要:一、 C++成员函数的重载C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。(1) void func(int a);(2) virtual void func(int a);(3) void func(int a) const;如果在一个类中,声明这四种函数,哪是重复定义?哪些是重载?其中(1)(2)是重复定义,故编译不能通过,而(3)与(1)(2)是不同类型的函数,是重载。【注意:众所周知,C++函数重载时返回值是不参与重载决议的, 也就是说,int lex_cast(const char*);double lex_cast(const char*);
阅读全文
Ogre的Singleton实现-模版实现,便于重用-(详细分析)以及笔者的改进
摘要:转自:http://www.cppblog.com/sandy/archive/2005/11/30/1436.htmltemplateclassSingleton{protected:staticT*ms_Singleton;public:Singleton(void){assert(!ms_Singleton);ms_Singleton=static_cast(this);}~Singleton(void){assert(ms_Singleton);ms_Singleton=0;}staticT&getSingleton(void){assert(ms_Singleton);ret
阅读全文
stdcall、cdecl详解(以及WINAPI和CALLBACK之类的宏对应什么)
摘要:转自:http://blog.csdn.net/huanjieshuijing/article/details/5822942对_stdcall 的理解在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机
阅读全文
STL中流相关的输入输出符和get函数彻底总结:cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
摘要:我的总结:【首先:对于流来说,就把流看成一个中转的仓库,对流进行>运算或者get函数的运算都是指,把“流”中的数据“运送”到“内存变量”中去,还是把内存变量中的数据“拷贝”到流中去。注意这里“运送”和“拷贝”的区别,我专门用“运送”这个动作来表示每次运算完后流的定位符都会发生变化。】【第二,对于输入输出是以内存变量为中心判断的,如果是从内存变量中取数据则为输出用>运算符。所以对于内存变量来说,cin是衣食父母,最为亲切,他总是养着我们,衣来张手饭来张口;而cout则是敌人,总是抢我们的东西。】【第三,对于标准输入输出流cin和cout来说,他们两个无时无刻不在自动和标准的键盘和屏幕
阅读全文
C++模版全掌握(实例)
摘要:转自:http://www.cppblog.com/mzty/archive/2007/05/24/24761.html前段时间重新学习C++,主要看C++编程思想和C++设计新思维。对模版的使用有了更进一层的了解,特总结如下:下面列出了模版的常用情况://1.模板类静态成员template<typenameT>structtestClass{staticint_data;};template<>inttestClass<char>::_data=1;template<>inttestClass<long>::_data=2;intm
阅读全文