http://blog.sina.com.cn/cstyle[订阅]
个人资料
图片幻灯
分类
    内容读取中…
评论
读取中...
音乐播放器
访客
读取中...
好友
读取中...
博文

圆下箭头一顿号
非凡增减富强针地长
三乘除,四加减,五移位
千万别把鱼忘记,它在盛饭的厨子里
小灯大灯灯灯不等
爸喂鱼,舅疑惑,裸鸡也疑惑
十三姨,十四父,十五逗,兜到低


圆下箭头一顿号”指的是第15级的运算符。其中圆指的是运算符(),下指的是下标运算符[],箭头指的
是指向结构体成员运算符->,顿号指的是结构体成员运算符、 
非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,凡指的是按位取反运算符
~,增减指的是自增和自减运算符++和--,富指的是负号运算符-,强指的是类型转换运算符(类型),针
指的是指针运算符*,地指的是地址运算符&,长指的是长度运算符Sizeof
三乘除,四加减,五移位” 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级
别而已。也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,加减指的是加法运
算符+和减法运

深入探讨C++中的引用(2007-04-19 12:42)

文章来源:blog.csdn.net

摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面、透彻地阐述。

  关键词:引用,const,多态,指针

  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。

  引用简介

  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

  引用的声明方法:类型标识符 &引用名=目标变量名;

  【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

  说明:

  (1)&在

超炫的概念设计——MyQQ

C++的static关键字(2007-04-16 19:50)
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。

一、面向过程设计中的static

1、静态全局变量

在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:

 //Example 1 #include <iostream.h> void fn(); static int n; //定义静态全局变量 void main() {         n=20;         cout<<n<<endl;         fn(); }  void fn() {         n++;         cout<<n<<endl; } 
静态全局变量有以下特点:
  • 该变量在全局数据区分配内存;
  • 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
  • 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:
 
对于普通类型的对象来说,它们之间的复制是很简单的,例如:
 int a=100; int b=a; 
而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。
 #include <iostream> using namespace std; class CA { public:         CA(int b)         {                 a=b;         }         void Show ()         {                 cout<<a<<endl;         } private:         int a; };  int main() {         CA A(100);         CA B=A;         B.Show ();         return 0; } 
  运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象B分配了内存并完成了与对象A的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。下面我们举例说明拷贝构造函数的工作过程。
 #include <iostream> using namespace std; class CA { public:         CA(int b)         {                 a=b;         }         CA(const CA& C)         {                 a=C.a;         }         void Show()         {                 c
assert的作用(2007-04-12 19:14)
assert()是C语台标准库中提供的一个通用预处理器宏在代码中常利用assert()来判断一个必需的前提条件以便程序能够正确执行例如假定我们要读入一个文本文件并对其中的词进行排序必需的前提条件是文件名已经提供给我们了这样我们才能打开这个文件为了使用assert()必须包含与之相关联的头文件 #include <assert.h> 
下面是一个简单的使用示例
assert( filename != 0 ); 
assert()将测试filename不等于0的条件是否满足这表示为了后面的程序能够正确执行我们必须断言一个必需的前提条件如果这个条件为假即filename等于0断言失败则程序将输出诊断消息然后终止 assert.h是C库头文件的C名C++程序可以通过C库的C名字或C++名字来使用它这个头文件的C++名字是cassertC库头文件的C++名字总是以字母C开头后面是去掉后缀.h的C名字正如前面所解释的由于在各种C++实现中头文件的后缀各不相同因此标准C++头文件没有指定后缀使用头文件的C名字或者C++名字两种情况下头文件的#include预处理器指示符的效果也会不同下面的#include指示符 #include <cassert>将cassert的内容被读入到我们的文本文件中但是由于所有的C++库名字是在名字空间std中被定义的因
指针和引用的区别(2007-04-12 19:12)
引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的一
个引用(reference),m 是被引用物(referent)。
int m;
int &n m;
相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,
他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不
是m 的拷贝,也不是指向m 的指针,其实n 就是m 它自己。
引用的一些规则如下:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k 被初始化为i 的引用。语句k 并不能将k 修改成为j 的引
用,只是把k 的值改变成为6。由于k 是i 的引用,所以i 的值也变成了6。
int 5;
int j&nb
枚举类型(2007-04-12 19:11)
如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。
  举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。
  这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义! enum box{pencil,pen};
enum box box2;//或者简写成box box2;
  再有一种就是在声明的时候同时定义。enum {pencil,pen}box,box2; //在声明的同时进行定义!
  枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作! enum box{pencil=1,pen=2};
但是这里要特别注意的一点是,如果你不进行元素赋值操作
ADO连接字符串的书写(2007-04-12 19:09)
Sql Server
      · ODBC
      o 标准连接(Standard Security):
      'Driver={SQL Server};Server=Aron1;Database=pubs;Uid=sa;Pwd=asdasd;'
      1)当服务器为本地时Server可以使用(local);
      'Driver={SQL Server};Server=(local);Database=pubs;Uid=sa;Pwd=asdasd;'
      2)当连接远程服务器时,需指定地址、端口号和网络库
      'Driver={SQL Server};Server=130.120.110.001;Address=130.120.110.001,1052;Network=dbmssocn;
      Database=pubs;Uid=sa;Pwd=asdasd;'
      注:Address参数必须为IP地址,而且必须包括端口号

      o 信任连接(Trusted connection): (Microsoft Windows NT 集成了安全性)
      'Driver={SQL Server};Server=Aron1;Database=pubs;Trusted_Connectio
C++结构(2007-04-12 19:07)
前篇已经说明编程时,拿到算法后该干的第一件事就是把资源映射成数字,而前面也说过“类型就是人为制订的如何解释内存中的二进制数的协议”,也就是说一个数字对应着一块内存(可能4字节,也可能20字节),而这个数字的类型则是附加信息,以告诉编译器当发现有对那块内存的操作语句(即某种操作符)时,要如何编写机器指令以实现那个操作。比如两个char类型的数字进行加法操作符操作,编译器编译出来的机器指令就和两个long类型的数字进行加法操作的不一样,也就是所谓的“如何解释内存中的二进制数的协议”。由于解释协议的不同,导致每个类型必须有一个唯一的标识符以示区别,这正好可以提供强烈的语义。


typedef

    提供语义就是要尽可能地在代码上体现出这句或这段代码在人类世界中的意义,比如前篇定义的过河方案,使用一char类型来表示,然后定义了一数组char sln[5]以期从变量名上体现出这是方案。但很明显,看代码的人不一定就能看出sln是solution的缩写并进而了解这个变量的意义。但更重要的是这里有点本末倒置,就好像这个东西是红苹果,然后知道这个东西是苹果