C/C++
文章平均质量分 65
sanfengshou
Happy!
展开
-
字符常量,字符变量,字符数组,字符串常量,字符串指针
字符常量:如a特殊字符常量:如/n字符变量:char c1 = a, c2; c2 = c; c2 = 130; int i = c1;一个字符数据在内存中占一个字节。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。printf("%c", c1); 先转换成相应字符,然后输出。printf("%d",原创 2009-08-22 21:48:00 · 2426 阅读 · 0 评论 -
C++ 单例模式
<br />C++编程语言是一个应用广泛的计算机应用语言,它功能强大,在一定程度上大大提高了程序开发效率。C++单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。<br />单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态方法获取该实例。如下面转载 2010-08-06 21:48:00 · 801 阅读 · 0 评论 -
C++虚继承的作用
<br />C++虚继承可以防止多重继承产生的二义性问题。<br /> 虚继承,就是在被继承的类前面加上virtual关键字,这时被继承的类称为虚基类,如下面代码中的base类。虚继承在多重继承的时可以防止二义性。<br /> class base<br /> class derived1 : virutal public base<br /> class derived2 : virtual public base<br /> class derived3 : pub转载 2010-08-06 22:36:00 · 843 阅读 · 0 评论 -
字符串转整型
<br />unsigned long currentMsgId_Int = strtoul(currentMsgId.c_str(), NULL, 0);<br />unsigned long previousMsgId_Int = strtoul(previousMsgId.c_str(), NULL, 0);原创 2010-12-08 11:37:00 · 529 阅读 · 0 评论 -
转 - C++中的explicit关键字
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public: MyClass( int num );}....MyClass obj = 10; //ok,convert int to MyClass在上面的代码中编转载 2010-10-18 17:24:00 · 558 阅读 · 0 评论 -
C++ 浅拷贝和深拷贝
浅拷贝,也就是按照比特一位一位地进行拷贝,是把一个类完全一样拷贝到另一个类。这时就出现问题了:类内部的指针的值是一样的,也就是说,两个类的实例内部的指针指向了同一块内存。当这两个对象析构的时候,同一块内存就会给析构两次,当然会出现问题。深拷贝,就是在这点上和浅拷贝不同的,也就是说,在拷贝的时候,深拷贝会提供一块新的内存用来保存数据,并使新的对象的指针指向这块内存,这两个对象析构的时候,也就不会把同一块内存析构两次了。转载 2010-10-24 14:05:00 · 626 阅读 · 0 评论 -
vector
本词条主要介绍 vectorVector 类在 java 中可以实现自动增长的对象数组; vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。目录 在JAVA中的详细说明 在C++中的详细说明 矢量、媒介、载体。 (1)矢量:具有方向性的量。 (2) 编程语言方面:vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vec转载 2010-12-16 13:35:00 · 497 阅读 · 0 评论 -
C++ String 详解
<br />之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。<br /> 好了,进入正题………<br />首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>。如下:<b转载 2010-12-20 10:55:00 · 434 阅读 · 0 评论 -
C++string类常用函数
C++string类常用函数<br />string类的构造函数:<br />string(const char *s); //用c字符串s初始化<br />string(int n,char c); //用n个字符c初始化<br />此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常<br />string类的字符操作:<br />转载 2010-12-20 10:57:00 · 430 阅读 · 0 评论 -
C++ 标准库 vector list map 基本使用方法 示例程序
<br />在stdafx.h中:<br />#include <iostream> <br />#include <string> <br />#include <vector><br />#include <list><br />#include <map><br />using namespace std;<br />MFC工程中:<br />void CVectorTestDlg::OnButton1()<br />{<br />/*<br />在头文件类中定义<br /转载 2010-12-20 11:22:00 · 864 阅读 · 0 评论 -
STL vector用法介绍
<br />介绍<br />这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。<br /> <br />Vector总览<br />vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,转载 2010-12-20 11:25:00 · 427 阅读 · 0 评论 -
typedef
<br />1. <br />typedef int myint<br /> <br />2.<br />定义一个函数指针<br />typedef void (CALLBACK* TIMERCALLBACK)(DWORD,void*);<br /> <br />使用:<br /> TIMERCALLBACK funcCallBack;<br /> funcCallBack = TimerTimeOut;<br /><br /> m_TimerQueue.S转载 2010-12-22 11:57:00 · 781 阅读 · 0 评论 -
GetProcAddress函数
<br />函数功能描述:GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。<br /><br />函数原型:<br />FARPROC GetProcAddress(<br /> HMODULE hModule, // DLL模块句柄<br /> LPCSTR lpProcName // 函数名<br />);<br /><br />参数:<br />hModule <br /> [in] 包含此函数的DL转载 2011-01-11 16:31:00 · 2377 阅读 · 0 评论 -
关于字符串池
<br />Java 字符串池<br />所谓天下文章皆是抄,在网上找一个Java 字符串池的文章,搜到N多条目,可看来看去也就两篇,总结如下:<br />首先看一段代码:<br />String a = "Hello";<br />String b = "Hello";<br />String c = new String("Hello");<br />String d = new String("Hello");<br />System.out.println(a == b);<br />System.转载 2011-02-18 13:24:00 · 6388 阅读 · 3 评论 -
如何利用socket进行HTTP访问
如何利用socket进行HTTP访问平常我们要访问某个URL一般都是通过浏览器进行:提交一个URL请求后,浏览器将请求发向目标服务器或者代理服务器,目标服务器或者代理服务器返回我们所需要的数据,浏览器接收到这些数据后保存成文件并进行显示。下面我们看看如何自己利用winsock2.h中的接口来实现这个功能?为了简化问题,作以下假设:通过代理服务器进行HTTP访问,这样就省去了对URL进行DNS解析的步骤,假设代理服务器的地址为:192.168.0.1:808。 这个功能由以下几个部分组成:1. 如何建立连接?转载 2011-03-07 10:12:00 · 1309 阅读 · 0 评论 -
C与C++语言中的转义字符有哪些?
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),用于表示字符串常量的双撇号( ")和反斜杠( /)等。转义字符用反斜杠/后面跟一个字符或一个八进制或十六进制数表示。 转义字符 意义 ASCII码值(十进制) /a 响铃(BEL) 007 /b 退格(BS) 008 /f 换页(FF) 012 /n 换行(LF) 010 /r 回车(CR) 013 /t 水平制表(HT)转载 2011-03-31 16:40:00 · 1295 阅读 · 0 评论 -
C++ static const 及 声明和定义的区别
class A{ public:A():b(100){}static const int a;const int b; //常数据成员只能且必须通过构造函数的初始化列表来获得值proected: private: } const int A::a = 100;//类的静态成员需要在类声明时或声明外初始化(全局初始化),若定义时加了cons原创 2009-09-22 20:45:00 · 1988 阅读 · 1 评论 -
Vector用法
Vector用于存储对象数组常用方法1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.b转载 2010-12-20 11:18:00 · 505 阅读 · 0 评论 -
函数指针中的回调函数(C语言版本)
<br />举个排序的例子<br /><br />#include <stdio.h><br />#include <string.h><br /><br />typedef struct person {<br />int age;<br />char name[20];<br />double height;<br />} person;<br /><br /><br />int sortOnAge(person* a, person* b) // 以年龄排序,用于回调<br />{<br />retu转载 2010-07-25 11:01:00 · 907 阅读 · 0 评论 -
VC 和 C++ 有什么区别和联系?
<br />初学者经常提出这样的问题:是学c++好还是学 Visual c++好?<br /><br />其实,这是个很奇怪的问法,就好像在问:是学开车好还是学开福特车好?开车是一种普遍的技术,用这个技术可以控制福特车或奥迪车,这在技术上没有很大的差别,最多只是一些开关的位置不同而已。同样的道理,c++是一种程序语言,现在已经成为ISO标准,是一种普遍的技术。Visual c++只是一种协助用户使用c++语言设计软件的工具。<br /><br />类似的工具还有很多,例如Borland c++ Bu转载 2010-07-01 14:44:00 · 5800 阅读 · 0 评论 -
C++中vector的用法
在使用前要包含vector对应的头文件: #include vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库负责管理存储元素的相关内存。我们把vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。我们将在第9章更详细地介绍容器。 使用vector之前,必须包含相应的头文件。本书给出的例子,都是假设已作了相应的转载 2010-01-10 15:18:00 · 3544 阅读 · 1 评论 -
C++ 内联函数的定义
class A{...inline F();...} inline A::F(){printf("inline F");} 或者内联函数直接在类中定义:class A{...F(){ printf("inline F");}...}原创 2009-09-22 21:48:00 · 593 阅读 · 0 评论 -
C++中的虚析构函数
基类的析构函数一般都是虚函数,为什么呢? 因为如果不把基类的析构函数定义为虚函数,当用一个基类的指针指向子类的对象,delete 该指针时,子类的析构函数并不会被调用。(具体原因可参见博客: C++虚函数表 ) 当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被原创 2009-09-22 13:05:00 · 510 阅读 · 0 评论 -
C++虚函数及虚函数表解析
虚函数的定义: 虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是public(可以定义为private or proteceted, 但是对于多态来说,没有意义。),在基类的类定义中定义虚函数的一般形式: virtual 函数返回值类型 虚函数名(形参表) { 函数体 }虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的原创 2009-09-21 08:03:00 · 19609 阅读 · 10 评论 -
const 的用法
1. 一些成员函数改变对象,一些成员函数不改变对象。例如: int Point::GetY(){ return yVal;} 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y){ xVal=x; yVal=y;} 为了使成员函数的意义更加清楚,我们可在不改变对原创 2009-09-21 10:10:00 · 1024 阅读 · 0 评论 -
关于delete C/C++ 指针
栈:函数调用的时候,在栈中保存局部变量和函数参数等。当函数返回时,自动清除栈。自由存储区:也称为堆(heap),可以看作大量的内存段。通过 new 操作符分配的内存在堆中。程序结束之前不自动清除自由存储区。需要由程序来负责释放(delete)。 1.对指向栈上内存的指针调用delete会导致程序Crash。 2. new 进行自由存储区中内存分配。如果 new 不能原创 2009-09-22 10:14:00 · 1836 阅读 · 0 评论 -
C++ 虚函数-多态的执行
有如下程序://-----------------class A { public: A() { printf( "base A/r/n" ); } virtual ~A() { printf( "base ~A/r/n" ); } public: virtual void VirtualFunc() { printf( "base VirtualFunc/r/n" ); }; voi原创 2009-09-22 13:24:00 · 796 阅读 · 0 评论 -
C++的三种继承方式
1. 公有继承当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中保持不变,而基类的私有成员不可访问。即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有和保护成员,派生类的其他成员可以直接访问它们;其他外部使用者只能通过派生类的对象访问继承来的公有成员;而无论派生类的成员还是对象都无法访问基类的私有成员。 2. 私有继承当类的继承方式为私有继承原创 2009-09-22 17:49:00 · 921 阅读 · 1 评论 -
C++ 函数模板和类模板(转)
函数模板示例://一个求绝对值函数的模板template typename T> T abs(T x){return x} ---------------------------------------------------------------------------------------------------------------------类转载 2009-09-22 22:04:00 · 846 阅读 · 1 评论 -
More Effective C++:通过引用捕获异常(转)
当你写一个catch子句时,必须确定让异常通过何种方式传递到catch子句里。你可以有三个选择:与你给函数传递参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by reference)。 我们首先讨论通过指针方式捕获异常(catch by pointer)。从throw处传递一个异常到catch子句是一个缓慢的过程,在理论上这种方法的实现对于这个过程来说是效率原创 2009-09-24 23:15:00 · 774 阅读 · 1 评论 -
Observer 设计模式(转)
观察者模式别名: 1:发布-订阅(Publish/Subscribe)模式; 2:模型-视图(Model/View)模式; 3:源-监听器(Source/Listener)模式; 4:从属者(Dependents)模式。 观察者模式定义: 观察者模式定义了一种一对多的依赖关原创 2009-09-24 23:21:00 · 622 阅读 · 0 评论 -
LPSTR、LPCSTR、LPTSTR、LPCTSTR的来源及意义
UNICODE:它是用两个字节表示一个字符的方法。比如字符A在ASCII下面是一个字节,可A在UNICODE下面是两个字节,高字节用0填充,而且汉字程在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。 LPSTR、LPCSTR、LPTSTR、LPCTSTR 及 LP原创 2009-10-12 13:52:00 · 980 阅读 · 0 评论 -
class B 和 #include "CB.h"
class B; 只是告诉编译器B是一个类,B的具体情况是什么则不告诉你(嘻嘻). #include "CB.h"则把B的全部都给了你(恭喜了) 所以后者更强力.前者的编译效率更高,在编译期间不管对自己无用的垃圾.把相关的东西推迟到LINK阶段做. 当在A中声明一个B的成员变量或者仅使用B做为A中某个成员函数的参数或者仅仅做为成员函数返回值类型时,在前面使用cl转载 2009-10-10 17:28:00 · 947 阅读 · 0 评论 -
extern的基本用法
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。 如在a.cpp 中定义了全局变量 int terry = 1;然后要在b.cpp中使用变量terry, 则需要在b.cpp 中加上 extern int terry; 或者在 b.cpp 中转载 2009-10-09 16:19:00 · 459 阅读 · 0 评论 -
VC++ 中的 _T
Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。 如果将来你不打算升级到unicode,那么也不需要_T。 _T("hello world") 在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既uni转载 2009-10-10 16:36:00 · 1115 阅读 · 0 评论 -
静态-全局静态函数(或变量)和类的静态成员函数(或变量)
Static关键字用来声明静态函数或者静态变量。静态函数用static声明的函数是静态函数。静态函数可以分为全局静态函数和类的静态成员函数。静态变量:用static声明的变量是静态变量。静态变量可以分为全局静态变量和类的静态成员变量。在类中,用static声明的变量为类的静态成员变量,它为该类的公用变量,对于该类的所有对象来说,static成员变量只有一份。 在类中,用原创 2009-11-04 11:30:00 · 1110 阅读 · 0 评论 -
详解 强制类型转换static_cast、dynamic_cast、reinterpret_cast和const_cast
详解强制类型转换static_cast、dynamic_cast、reinterpret_cast和const_cast 关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_转载 2009-11-13 17:32:00 · 544 阅读 · 0 评论 -
堆和栈的区别 (转贴)
堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可转载 2009-12-28 17:30:00 · 444 阅读 · 0 评论 -
读书笔记_chapter1
1. Setw( size )的使用方法:#include //setw(int asize)const int nm_size = 128;char user_name[ nm_size ];cin >> setw( nm_size ) >> user_name;如输入的字符个数超过nm_size, 则取前nm_size -1 个字符给数组,数组中最后一个元素自动设为空字原创 2009-09-05 10:58:00 · 502 阅读 · 0 评论