C++从资源文件中静态装载图像
在wxWidgets中装载图像是非常容易的,但是如果将图像文件和可执行文件放到一起,在发布时只需要发布可执行文件,要实现这种功能,一般可以使用资源文件来解决。在windows下的资源文件的源文件是*.rc,编译后叫*.res。在linux下类似,源文件为*.xrc,编译后叫*.xres。但它们是xml格式的,要装载这种资源文件也得动态进行装载。相当于配置文件。 如果想将其直接编译进可执行文件。需要一个工具wxrc。这个工作在wxWidgets中的untils目录中,可自己编译。可使用这个工具将*.xrc...
用C/C++扩展Python语言
Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上。她提供大量的API以方便程序员利用C/C++对Python进行扩展。因为执行速度慢几乎是所有脚本语言的通病,Python通过一个巧妙的方法,使得程序员可以利用C/C++编写执行速度比较慢的模块,从而获得与C/C++差不多的执行性能。本文给出一个例子说明怎样用C来扩展Python。 1、在C和Python之间进行数据类型转化 Python有六种基本数据类型:整型,浮点型,字符串,列表,字典,元组。在进行介绍之前,我们先了解...
C++中对文件的读写的实现方法
无论读写都要包含fstream头文件 读:从外部文件中将数据读到程序中来处理 对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。 这个对象当中存放即将从文件读入的数据流。假设有名字为myfile.txt的文件,存有两行数字数据,具体方法: inta,b; ifstreaminfile; infile.open(\"myfile.txt\");//注意文件的路径 infileab;//两行数据可以连续读出到变量里 infile.cl...
C++宏定义中的## 和#的区别
我们用一来实例来学习一下C++宏定义中的## 和#的区别,首先我们来定义一个宏:#define STRCPY(a, b) strcpy(a ## _p, #b) 1. 宏定义里面有个##表示把字符串联在一起。如: #includestdio.h #defineCAT(x,y)x##y intmain() { printf(\"%s\",CAT(\"hello\",\"world\")); return0; } 2.宏定义中的#表示将其变为字符串。如: #includestdio.h #includest...
基础知识:C++的模板及模板特化
说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了模板特化的几种类型, 一是特化为绝对类型; 而是特化为引用,指针类型;三是特化为另外一个模板类。 这里用一个简单的例子来说明这三种情况: // general version templateclass T class Compare { public: static bool IsEqual(const T lh, const T rh) { return lh == rh; } };...
输出当前线程call stack代码
void CallStack() { unsigned int *_ebp; printf("Call Stack "); __asm { mov _ebp,ebp } while(*_ebp) { printf("%08X ",*(_ebp+1)); _ebp = (unsigned int *)(*_ebp); } } 打印当前线程的call stack到标准输出。...
关于右值指针类型的动态类型
今天看到一篇很好的贴纸就转了过来,大家仔细研究一下看看吧。 struct B{ virtual void f(); }; struct C:B { virtual void f(); }; B b; (b)-~B(); new (b) C; (b)-f(); // 这里调用的是B::f 为什么这里没有出现多态呢?来看达人的解释: “The dynamic type of an rvalue expression is its static type.” So if you try B* p = b; p...
使用带参数的对象作为类成员
C++中如何实现使用带参数的对象作为类的成员呢?今天我们就来为大家解决这个问题,大家请看如下示例: class CStudent ...{ public: CStudent(int age = 16) ...{ m_age = age; } private: int m_age; } class CClass ...{ lpublic: CClass() ...{ } private: CStudent m_student1; CStudent m_student2(10); // 试图声明一个m_ag...
Singleton的C++实现 及相关问题
编程序的时候很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。 最简单的方法是用个全局变量或者用个静态变量。但这违反基本的object oriented design 的原则,使程序执行的整体结构,可读性以及可维护大大下降。同时如果所编写的程序不是主程序而是dll的话全局变量的寿命更难控制。 design pattern 中最简单也是应用最广的就是singleton, 就是用于解决这个问题的。下面是一个简单的singleton的c++的实现,...
C++基础入门:载入字符串的表资源
如果你想创建一个容易进行语言版本移植的应用程序,你就不能在你的源代码中直接包含本土语言字符串 (下面这些例子我用的语言都是英语,因为我的本土语是英语),比如下面这种写法就很糟: CString s = \"There is an error\"; 你应该把你所有特定语言的字符串单独摆放(调试信息、在发布版本中不出现的信息除外)。这意味着向下面这样写比较好: s.Format(_T(\"%d - %s\"), code, text); 在你的程序中,文字字符串不是语言敏感的。不管怎样,你必须很小心,不要使...
C++编程中尽量少使用unsigned
unsigned 可能一部分人对于非负数习惯使用unsigned类型:一来是使的代码清晰易懂(有点类似于const,但问题多多,下面会讲到),二来是可以表达更大的数(这种情况应当比较少吧)。 本人不使用的原因: 1 如果从一致性来讲,对于自己确认(只是自己确认)为非负数加unsigned,那对于for( int i=0; i100;i++)中的i也应当加,但事实上很少有人会在这添加吧。 2 unsigned类型的变量,在进行比较操作时经常出现比较怪异的问题(对于老手可能用词不当),如: unsigned...
C++编程开发中尽量使用引用做函数参数
如果是不修改参数值,可改为const引用。 传引用主要是可提高效率:如果参数是类的话,不使用引用传递,则需要构造新的对象,如下: class A { public: A() { cout"AA"endl; } A(const A a) { cout"A"endl; } }; void f(A a) { } int main(arraySystem::String ^ ^args) { A a; f(a); getchar(); return 0; } 打印AA,如果不使用引用的话打印AA A,即需要多执...