
C++
文章平均质量分 81
xuxinshao
这个作者很懒,什么都没留下…
展开
-
函数参数传递与构造函数和析构函数
#include.h>class myclass{public: myclass(int n); ~myclass(); void set_i(int n) { i=n; } int get_i() { return i; }private: int i;};myclass::myclass(int n){ i=原创 2005-08-06 15:49:00 · 1587 阅读 · 0 评论 -
volatile关键字
olatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下: int volatile nVint;转载 2009-11-17 09:56:00 · 586 阅读 · 0 评论 -
c++ volatile用法(转)
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)转载 2009-11-17 09:55:00 · 697 阅读 · 0 评论 -
do while 的两个小技巧
do {...}while (0); // while (false)的一点有用的小技巧:1. 在宏里用:看下面情况:#define swap(x,y) { int tmp = x; x = y; y = tmp; }使用时如果这样写: if (condition) swap(a, b); else {...}将被替换成:if (con转载 2009-11-16 20:57:00 · 825 阅读 · 0 评论 -
巧用 mutable
使用可变(mutable)成员隐藏实现细节 关键字 mutable 是一个奇怪的修饰符(specifier),它只能够用于一个类的非静态数据成员。下面我将讨论 mutable 的语义和用法,但是首先我要解释一下 C++ 对象模型的一个关键概念。对象的状态 一个对象的状态由其非静态数据成员的值构成,因此,修改一个数据成员将会改变整个对象的状态。将一个成员函数声明转载 2009-11-16 20:34:00 · 677 阅读 · 0 评论 -
visual c++ 7.1对源文件encoding的支持(收藏自http://blog.youkuaiyun.com/hansoft/archive/2005/10/17/505370.aspx)
C++的源文件首先是一个文本文件,因此必然涉及到encoding的问题,vc7.1能处理哪些encoding编码的源文件呢?以下是我对其进行的试验,我的环境是windows 2000简体中文版,系统和用户的locale设置都是中文(中国)。源文件采用iso-8859-1编码,包括除ascii以外的字符,例子是: #include int main() { std::ofstream of("转载 2008-10-20 17:52:00 · 1291 阅读 · 0 评论 -
c++拷贝文件
#include#include using namespace std;int main(){ ifstream in("test.txt"); ofstream out("testout.txt"); for(string str; getline(in,str);) out}原创 2007-07-06 17:52:00 · 1304 阅读 · 0 评论 -
C++资源之不完全导引
1,前言 无数次听到“我要开始学习C++!”的呐喊,无数次听到“C++太复杂了,我真的学不会”的无奈。Stan Lippman先生曾在《C++ Primer》一书中指出“C++是最为难学的高级程序设计语言之一”,人们常将“之一”去掉以表达自己对C++的敬畏。诚然,C++程序设计语言对于学习者的确有很多难以逾越的鸿沟,体系结构的庞大,应接不暇并不断扩充的特性……除此之外,参考资料之多与冗杂转载 2006-11-25 09:47:00 · 1235 阅读 · 0 评论 -
加速你的开发环境[VS2003]
(1)禁用起始页在缺省情况下,起始页会提供我们最近的工程列表,但它是以WEB页面方式出现的,也就是说,他启动了IE的一个实例,这是VS2003启动变慢的一个首因,如果你习惯于从“最近项目列表”启动项目,那么完全可以禁用掉起始页,方法很简单:“Tools”->“Options”->“Environment”->“General”,在At Startup中选择:Show empty environme原创 2006-06-12 11:18:00 · 1225 阅读 · 0 评论 -
从两道经典试题谈C/C++中联合体(union)的使用
试题一:编写一段程序判断系统中的CPU是Little endian还是Big endian模式?分析:作为一个计算机相关专业的人,我们应该在计算机组成中都学习过什么叫Littleendian和Big endian。Little endian和Bigendian是CPU存放数据的两种不同顺序。对于整型、长整型等数据类型,Bigendian认为第一个字节是最高位字节(转载 2009-11-18 15:24:00 · 631 阅读 · 0 评论 -
C++中的临时对象(http://blog.chinaunix.net/u/11680/showart_316503.html)
一,以值的方式给函数传参。 我们知道给函数传参有两种方式。1,按值传递;2,按引用传递。按值传递时,首先将需要传给函数的参数,调用拷贝构造函数创建一个副本,所有在函数里的操作都是针对这个副本的,也正是因为这个原因,在函数体里对该副本进行任何操作,都不会影响原参数。我们看以下例子: /*-----------------------Platfo转载 2009-12-02 11:45:00 · 1278 阅读 · 1 评论 -
在Windows XP上编译OpenCV
安装包有:OpenCV-2.4.2.exe,cmake-2.8.9-win32-x86.exe,我用的是mingw是qtcreator-2.4.1自带的,后面的版本把mingw去掉了。注意要把C:\Qt\qtcreator-2.4.1\mingw\bin;C:\Qt\4.8.0\bin;C:\Program Files\CMake 2.8\bin添加到环境变量中去。(1):CM原创 2012-10-23 16:27:52 · 3724 阅读 · 0 评论 -
C++的可移植性和跨平台开发
这次聊的话题主要是和硬件体系有关的。比如你的程序需要支持不同类型的CPU(x86、SPARC、PowerPC),或者是同种类型不同字长的CPU(比如x86和x86-64),这时候你就需要关心一下硬件体系的问题。 ★基本类型的大小 C++中基本类型的大小(占用的字节数)会随着CPU字长的变化而变化。所以,假如你要表示一个int占用的字节数,千万不要直接写“4”(顺便说一下,直接写“4”还转载 2012-07-18 15:28:47 · 1152 阅读 · 0 评论 -
windows XP编译Qt4.8.0错误
编译器是mingw32-gcc-4.4.0Perl not found in environment - cannot run syncqt.解决方法:You can either go to into the Qt folder and look for a directory called bin and delete these two files: syncqt原创 2012-06-01 15:31:52 · 5104 阅读 · 1 评论 -
最全的编码总结笔记(讲的很透彻)
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符转载 2012-01-06 11:34:38 · 3761 阅读 · 0 评论 -
笔记本LCD与LED的区别
显示屏是笔记本的关键硬件之一,目前主流的屏幕有LCD与LED两种.1>LCD的特点LCD是液晶显示屏的全称,主要有TFT、UFB、TFD、STN等几种类型的液晶显示屏。笔记本液晶屏常用的是TFT。TFT屏幕是薄膜晶体管,是有源矩阵类型液晶显示器,在其背部设置特殊光管,原创 2011-08-31 09:13:39 · 2336 阅读 · 0 评论 -
Purify检测的代码错误类型
一、红色叹号提示1、 ABR: Array Bounds Read 数组越界读(只检测动态内存分配的数组,对Global、Local、Static的数组无法检测)。2、 ABW: Array Bounds Write 数组越界写(只检测动态内存分配的数组,对Global、Local、Static的数组无法检3、 ABWL: Late Detec转载 2010-05-04 11:32:00 · 994 阅读 · 0 评论 -
回调函数之精神
最近,忙着搞个回调函数,但是我连回调函数是什么都不知道,好在经过一番修炼,略知一二,分享如下: 在说回调函数之前,首先要搞清楚什么是函数指针:它就是一个函数在编译时被分配的入口地址,可以将该地址赋给一个指针,这样指针地址变量持有函数入口地址,它就指向了该函数,所以称这种指针为指向函数的指针,简称函数指针。在说明函数指针时,同时也要描述指针所指向的函数的参数类型和个转载 2010-03-12 11:09:00 · 1105 阅读 · 1 评论 -
C++ 中 extern "C" 用法小结C++ 中 extern "C" 用法小结(http://blog.youkuaiyun.com/playingguitar/archive/2006/08/15/1066127.aspx)
昨天晚上翻《C++ Primer》偶尔看见介绍 extern "C" 的那一节,看着看着竟然有点糊涂了,觉得书上说的好像有点不对。记得以前也曾经看过这一节,也看过几篇介绍这个的文章,这次又犯糊涂,看来还是以前没有搞清楚。后来仔细看了看书上的介绍,又翻了一下《The C++ Programming Language》,总算清楚了一些,书上说的没错,是我以前理解的有问题。在C+转载 2010-02-02 15:36:00 · 780 阅读 · 0 评论 -
编译OpenSceneGraph
(1)安装osg1.0_setup_2005-12-09.exe后,在C:/Program Files/OpenSceneGraph目录下有个osgsrc.zip文件,解压缩此文件。(2)下载STLport-4.6.2。解压缩后把stlport拷贝到C:/Program Files/Microsoft Visual Studio/VC98目录下。(3)配置STL。打开C:/Program原创 2006-03-07 15:13:00 · 1512 阅读 · 0 评论 -
用vc6.0编译OpenSceneGraph第一个程序
(1)源程序#include #include #include #include #include int main(int argc,char *argv[]){ std::string filename("cow.osg"); //load the scene. osg::ref_ptr loadedModel= osgDB::readNodeFile(filename); if(!原创 2006-03-14 10:19:00 · 3715 阅读 · 1 评论 -
指针参数是如何传递内存的?
(1)如果函数的参数是一个指针,不要指望用该指针去申请动态内存。#include #include string.h> void GetMemory(char *p,int num){ p=(char *)malloc(sizeof(char)*num);//内存泄露} void Test(void){ char *str=NULL; GetMemory(str原创 2005-08-07 21:53:00 · 1104 阅读 · 0 评论 -
static
做为类成员静态数据成员同全局对象相比,使用静态数据成员有2个优势:(1)静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。(2)可以实现信息隐藏。静态成员可以是private成员,而全局对象不能。初始化:因为静态数据成员不从属于任何一个具体对象,所以必须对它进行初始化,而且对它的初始化不能在构造函数中进行。一般地,静态数据成员在该类定义之外被初始化。如同一个成员函原创 2005-08-07 20:59:00 · 849 阅读 · 0 评论 -
何时执行构造函数和析造函数
局部对象的构造函数在遇到对象说明语句时执行全局对象的构造函数在main()开始执行之前执行#include iostream.h>class myclass{public: int who; myclass(int id); ~myclass();};myclass::myclass(int id){ coutidendl; who=id原创 2005-08-06 15:08:00 · 1778 阅读 · 0 评论 -
移位操作
从一端移出一位时,从另一端移入一位0。这样,移位不是循环移,即从一端移走的位不移入另一端,移出的位都丢失了。#include iostream.h> void main(){ int i=1; int j=0; for(j=0;jj++) { i=i// i*=2;原创 2005-08-14 17:18:00 · 1028 阅读 · 0 评论 -
extern "C"链接指示符
如果C++程序要调用已经被编译后的C函数,该怎么办?假设某个C函数的声明如下:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号extern"C"来解决这个问题。 extern "C原创 2005-08-07 18:29:00 · 1120 阅读 · 0 评论 -
拷贝构造函数
#include string.h>#include.h> //自定义字符串类class CString{public: CString(char *pSrc); //CString(const CString & Src); ~CString(); public: char *m_pData;}; CString::CString(c原创 2005-08-06 17:31:00 · 1137 阅读 · 1 评论 -
内存分配
内存分配方式有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或原创 2005-08-08 13:49:00 · 1038 阅读 · 0 评论 -
变量的定义和声明
/file1.cpp#include stdio.h> void f2(int);int c;//定义 void f1(int a){ c = a;}void main(){ f2(10);} //file2.cpp#include stdio.h> void f1(int);extern int c;//声明 void f2(int b){ c = 5;原创 2005-08-08 13:23:00 · 991 阅读 · 0 评论 -
指针与数组的对比
(1)数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。(2)指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。#include iostream.h>void main(){ char a[]="hello";原创 2005-08-08 14:18:00 · 1030 阅读 · 0 评论 -
虚函数
当用指向基类的指针变量指向子类的对象时,可以通过指针引用子类中定义的成员函数,从而实现运行时的多态性。#include iostream.h>class A{public: virtual void display() { cout class A"endl; }}; class B:public A{public:原创 2005-08-07 15:29:00 · 814 阅读 · 0 评论 -
C++类的继承与多重继承的访问控制(收藏)
C++类的继承与多重继承的访问控制(收藏)在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论。 对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。 在这里我声明一下,对于此章节的内容不太适合用过多的文字进行描述,主要还是看例子,通过例子熟悉之间的关原创 2005-09-14 13:24:00 · 1203 阅读 · 1 评论 -
memcpy的实现
void *mymemcpy( void *dest, const void *src, size_t count ){ char *pdest = static_castchar*>(dest); const char* psrc = static_castconst char*>(src); if( pdest>psrc && pdestpsrc+count)/原创 2005-09-12 16:39:00 · 1199 阅读 · 2 评论 -
VC6中编译参数设置 (收藏)
VC6中编译参数设置 (收藏)编译参数的设置 主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下: /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"原创 2005-09-12 14:12:00 · 1157 阅读 · 0 评论 -
类中的回调函数(收藏)
类中的回调函数(收藏)#1回调函数是函数的一种,都有一样的声明和定义格式。回调函数是其他函数中的参数。也就是说其函数地址作为其他函数的参数。我是这样理解的。回调函数不同的地方有不同的使用方法,一般很少用到,API里常用。回调 原文CALLBACK。 简单来说,当你调用一个函数包含如下的入口参数时,fun(MYFUN* fun1,.....)的时候,我们就可以将函数指针fun1叫做回调函数。这么叫的原创 2005-09-12 13:51:00 · 5836 阅读 · 1 评论 -
c++对象模型笔记之拷贝构造函数
拷贝构造函数拷贝构造函数: 以一个对象的内容去初始化另个对象。 (关键在于初始化)有三种情况下会调用拷贝构造函数 class x {……};(1)X x; X xx=x //不是赋值操作而是拷贝构造函数(2)void foo (X x); // 对象参数(3)FooBar() { X x; return x;} // 返回对象如果类没有提供显示的拷贝构造函数,编译器采用的是位逐次原创 2005-09-15 10:08:00 · 1475 阅读 · 0 评论 -
c++对象模型笔记之构造函数
构造函数你是不是这样认为:(1)任何类如果没有定义默认构造函数,编译器就会合成一个;(2)编译器合成的会明确社顶类中每个数据成员的默认值;事实并非如此,只有C++编译器需要的时候才会合成个默认构造函数。类中带有对象成员class A{……}; class B{ private: A a; //对象成员 int x;}合成的构造函数B::B( ){ a.A::A();} 假如你定义了个构造函数原创 2005-09-15 09:56:00 · 1132 阅读 · 0 评论 -
strcpy的疑问
strcpy的疑问 //-----------------------------------------------------------------------------//----------------------------------------------------------------------------#include stdio.h>#include strin原创 2005-09-14 15:32:00 · 1094 阅读 · 0 评论 -
object slicing与虚函数
#include iostream.h> class CObject{public: virtual void Serialize() { cout}; class CDocument:public CObject{public: void func() { coutendl; // Serialize();//原创 2005-08-07 16:47:00 · 1239 阅读 · 0 评论 -
各平台宏
#include #include int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); int a = 0;#ifdef _WIN32 a = 100;#elif __linux__ a = 200;#ifdef __arm__ a =原创 2013-03-10 19:34:46 · 1000 阅读 · 0 评论