C++简明提要
C++数据类型
C++运算符
C++
C++语句
C++库函数
C++常用的其它函数
                                                    罗伟
                                        2001年4月1 
     
C++数据类型
数据类型
   
数值范围
                   
bool
布尔类型值
truefalse
bool Myb1,Myb2    Myb1=true  Myb2=i<k
char
单字符单字节整型数
-1281270255
char ch1,ch2  ch1=’A’  ch2=65  //本例中ch1=ch2
char message1[20]=”HI!”  char message2[]=”I love you”           
unsigned char
单字节无符号整型数
0255 
0x00Xff
//定义(数组)变量Buffer1[1000]来存放二进制数据缓冲区。
unsigned char Buffer1[1000]
signed
char
单字节整型数
-128127
signed char Buffer2[2000]
int
(2)4字节整型数
short
long相同
int I ,k  I=0  k=100
int N=1
unsigned
int
无符号整型数
065535
unsign int I,k    I=55  K=50000
unsign int N=0xFFFA 
short
2字节整型数
-32768
32767
short I,k     I=-1    k=2
short n=-1000
unsigned
short
2字节无符号整型数
065535
unsigned I,k  I=2  k=2
unsigned n=5
long
4字节整型数
正负20亿之间
long I    I=-123456    long k=1000L
unsigned
long
4字节无符号整型数
040亿
unsign long I=800000 
float
单精度浮点数
-3.4*10e38
3.4*10e38
float x1,y1    x1=0.000Fy1=3.1415926F
float z1=3.2e-9F      float z2=2.828E14F
double
双精度浮点数
-1.8*10e3081.8*10e308
double X1,Y1  X1=1.234    Y1=3.7E5
double z1=-6.87e-3
long
  double
长双精度浮点数
大于double
long double a1=-3.14e-20
wchar_t
长字符(国际字符集)
unsigned
wchar_t str1[10]    str1[0]='T'    str[1]='h'str[2]='e'
#define
#undef
定义常量(宏定义)
取消定义常量(宏定义)
#define PI 3.1415926    //不中分号;
#define S PI*r*r
…….    #undef  PI
const
定义常量(#define安全)
可在函数体内定义
const int PI=3.1415926  //运行中不能更改PI
const char *NAME="重庆"  //运行中不能更改NAEM
char *const NAME="zhang"//定义常指针(不能移动指针)
NAME[3]='b'    //改变常指针所指数据值
inline
定义内置函数
怎么用printf输出bool函数值(有宏定义的功能,放于主调函数前.
inline  float fun1(double r)
{return 3.1415926*r*r}
int mymain()
{Edit1->Text=fun1(25.8)}
数组初始化
使用局部静态变量定义
只有在定义全局变量或局部静态变量时才能对数组初始化
static int a[5]={0,1,2,3,4}
static int b[2][3]={{00,01,02},{10,11,12}}
static char str1[4]={'a','b','c','\0'}
static char str1[]="abc"
类型强制转换
传统C中格式:
int i=8
float x=(float)i
C++支持
左格式
int i=5 float f  f=float(i)
char str1="3.1415" double d d=double(str1)
union
{……}
无名联合
{}中定义的变量共享一内存
union
{int I  float f1char str1[8]}
//则各种类型变量共享一内存;可直接存取
I=20  f1=3.14
类型名 &
定义引用(引用变量是被引用变量的别名,它们共占一个内存)(引用实际是一和隐式指针,引用变量时.可以不写指针运算符*)
改动其中一个变量值将影响另一个值
int k int &j=k
int *p1=&k int &p2=k
k=30
Edit1->Text=j  //j值此时为30
Edit2->Text=*p1  //*p1值为30
Edit3->Text=p2  //p2值为30
String
(系统类)
定义字符串变量
可直接加
String str1[10],str2[10],str3[30]
*str1="abc"    *str2="def"  *str3=*str1+*str2
Edit1->Text=*str3
数据类型
   
数值范围
                   
C++运算符
表示符号
说    明
              示  例
+ - *  /
加减乘除
int Sum  int x=2  int y=3  Sum=x*(x+y)
%
求两整数的模
int I=11  k=3 int Mod  Mod=I%k    (Mod值为2)
&&
逻辑与
if (I>10) && (k<9)  {………….}
||
逻辑或
                  //非0为真,0为假
!
逻辑非
?:
条件运算符
int a=5,b=3  max=(a>b)?a:b            //max值为5
,
逗号运算符
int max max=(a=3*5,a*4),a+6    //自左向右,max值为66
> >= < <=
大小(等)于
==  !=
等于,  不等于
if (getch()!='\n')      if (x==2)
>>    <<
向右(左)移位
()
括号运算符
[]
数组运算符
->
指针类成员运算符
class a{private: x,y  public:fun1() float z}
//定义类a        a  b,*p  //定义b*p 两个对象.
.
非指针类成员运算符
b.z=5.2        //对象b为指针类型对象,.
p->fun1        //对象p为指针类型对象,->
::
作用域运算符
int pk sub1(){int pk=2 ::pk=5 } //加了::为改变全局变 
pk,函数sub1()中的同名局部变量值保持原值2
*
指针变量运算符
详指针页
&
取地址运算符
详指针页
.*
->*
~
类析构函数前缀
class  a{…}     
a::~a(){……….}
operation+()
运算符重载(加法)
运算符重载可用于实现类的对象直接相加减等;
class com{…………}  /定义类com
com a,b totle    //定义类的三个对象a,btotle
com operation+(com c,com d )
{com temp  al //realimag
            temp.imag=c.imag+d.imag // 为类中成员
return temp }
之后就可以使用  totle=a+b  total=opetator+(a,b)
operation-()
运算符重载(减法)
operation*()
运算符重载(乘法)
operation/()
运算符重载(除法)
operation<()
运算符重载(小于)
&& || ! == ++ --等
C++
说明
    格          式
        示    例
类定义
class 类名{
private:
私有数据成员和成员函数
protected:
保护数据成员和成员函数
public:
公有数据成员和成员函数
}
//类中的成员可以在类定义外定义,但需在类中相应位置声明,在类外定义格式:
成员类型 类名::成员名(参数表){}
class  cir{
private:
  int k; double d; char *str ;
                //不能赋初值
  void prsub1(int I)
    {I=k*d;}
public:
  int p1;
  void pusub2(int) //声明,函数体在外
  float pusub1(int n,char *p)
  {n=2*k; p="abc";return n}
};
void cir::pusub2(int m)  //将类成员函
{k=3*m; }          数定义在外
对象定义
及引用
类名  对象名表……..
cir obj1,obj2;    //定义对象obj1,obj2
cir *obj3      //定义对象*obj3
Edit1->text=obj1.pusub1(3,"abc");
Edit2->text=obj3->pusub1(3,"abc");
//对象不能引用类中的私有成员,只有类定义中的公有成员才能引用.       
构造函数
类名(参数表)
{ 函数体..(主要是初始化类中的原始数据)}
//在类中构造函数可以系统自行生成(为空),构造函数必需同类名一样.1构造函数可以不带参数.
若类cir 的构造函数定义为:
cir::cir(int a,int b;char *s)
{k=a;  d=b;str=new char[strlen(s)+1];
  strcpy(str,s);}
int main()
{cir obj4(2,4.5,"abc");….} //对象obj4被定义的同时也初始化将其私有成员k和d值初始化为2和4.5
析构函数
~类名(参数表)
{ 函数体..(主要是当对象撤消时作一些处理工作,如变量所占内存等)
}
cir::~cir()
{delete str;}  //当对象撤消时,清除对象中的变量*str所占内存
重载构造函数
一个类中可以定义几个所带参数不同的构造函数,以便适应不同情况;
class A{private:……..
public:
A();  //不带参数的类
A(int); //带一个整形参数的类
A(float); //带一个浮点参数的类
A(int,double,char); //带三个参数的类
若定义对象:A obj6(3.14); 则系统自动调用带一个浮点参数的构造函数进行初始化,其它不起作用.
拷贝构造函数
类名(const 类名 &对象引用名)
依据已存在的对象建立一个新对象,(将原对象各成员逐域拷贝到新对象中)
系统自动有缺省的函数(对象拷贝 后成员完全相同)
cir::cir(const  cir  &p)
{k=2*p.k; d=2*p.d;}
cir obj7(2,3,"abc");
cir obj8(obj7);  //或cir  obj8=obj7;
//则对象obj8中中的私有成员k=4,d=6 其余同obj7对象成员完全一样.
对象数组
类名  对象名[数量]
cir obj9[3];
float f[3];
for (I=0;I<3;I++)
{f[I]=obj9[I].pusub1(I,"a");}
对象指针
cir obj10,*obj11; float f1,f2;
f1=obj10.pusub1(3,"a");
obj11=&obj10;
f2=obj11->pusub1(80,"b");
友元函数
(一般函数作友元)
友元函数可以访问类中的私有成员
在类外定义,不能加::符号
class A{
private: int x; float y;
public:
friend void fr1(A  &); //声名友元函
…………..};                数
void fr1(A &P)
{x=2*x;}
友元成员(一个类的成员函数作为另一个类的友元)
class A{
………void fr1(B &);};
class B{
………..friend void A::fri(B &); };
void A::fr1(B &P)
{count<<P.(类B中的成员);}
派生类
(可访问基类中的保护成员)
class 派生类名派生方式  基类名{派生类新增的数据成员及成员函数}
//派生类具有基类的所有成员并新增了自定义新的成员
派生方式:private  public
public(公有派生),基类中的所有公有成员在派生类中也是公有的
private(私有派生),基类中的所有公有成员只能成为派生类中的私有成员.
无论何种派生,基类中的私有成员既不允许外部函数访问,也不允许派生类中的成员函数访问.
class BASE{
private:  int x;
public:  void setx(int n) {x=n;}  };
class A:private  BASE{
private : int  y;
public: void setxy(int n) {setx(n);y=n;}      };
class B:public  BASE{
{private : int z;
public :
void  setxyz(int n){setx(n);y=2*n;}
};
多重继承class C:public BASE,private A{…};
C++语句
说明
    格          式
        示    例
if 
语句
格式1if (逻辑表达式)  {语句}
格式2if (...语句1;
        else if (...语句2;
        else if (...语句n
        else 语句n+1
格式3:if (...)
            if (...) 语句1;
            else      语句2;
        else
            语句3
if  (x<0 ) y= -1;
else if (x= =0) y=0;
  else y=1;
if (a>=b)
  {t=a;a=b;b=t;}
else
  {a=b=0;
    printf(“error!!”)
    }
switch
语句
switch (表达式)
case 值1:
      {....;break;}
  case 值2:
      {....;break;}
  ..............
  default:
        {....;break}
//表达式可以是数字,字符等类型;
int a=3;  int b=2;  int c;  m=a-b;
switch  (m)
{case  0: {printf(“m=0”);break;}
case  1: {printf(“m=1”);break;}
default :    {}
}
char str1[]={“China”};
switch (str1)
{case  “USA”;  {……..}
case  “China”; {……..}
}
while
循环
语句
while  (表达式)
{语句;.....
    continue //结束本次循环
    break    //退出本层循环
…………………
int  I,Sum=0;  I=1;
while (I<=100)
  {Sum=Sum+I;
  I++;}
do
while
语句
do
  {语句;.....
    continue //结束本次循环
    break    //退出本层循环
……………} while (表达式)
int  I,Sum=0;  I=1;
do
  {Sum=Sum+I;
  I++;} while (I<=100);
for
语句
continue
break
语句
for(表达式1;表达式2;表达式3)
  {语句1
    .....;
    continue //结束本次循环
    break    //退出本层循环
    .....}
for (k=1;k<=100;k++)
  {Sum=Sum+k;}
for (k=1,n=1,k+n<90;k++,n++)   
  {………………...}
for (;str1=’A’;)  {…}
//相当于:for(循环变量赋初值;循环条件;循环变量增值)
return
语句
return  表达式(或值)
//从函数中退出并带回一个值;相当//于其它语言中的 Exit Sub 语句
double Mysub(int n) //自定义函数
  {n=n*2;
  return n;}
try异常处理语句
try
{语句或函数名;...}
catch(类名1[对象名]){处理语句}
catch(类名2[对象名]){处理语句}
clase file_err {
public: char  file[81];
file_err(char *f,char *m)
{strcpy(file,f;)}
void main()
{try{
open_file();
}
catch (file_err  ferr)
    {...;exit(1);}
}
#include
文件包含命令
#include  "文件名"
#include "math.h"
#ifdef
条件编绎
#ifdef  标识符    //标识符存在 
    程序段1....  时或为真时
else              执行程序段1
    程序段2…    否则执行程序
#endif              段2.
//可用于程序调试或更据不同情况有选择的编绎.
#define  DEBUG1  1
………………………
#ifdef  DEBUG1
  Edit1->Text=x;
#endif
//若变量DEBUG1被定义了在文本框中显示内存变量x的值,用于调试程序,不用时,只需删除#define  DEBUG1  1 语句
C++库函数(数学函数):  #include <math.h>#include<cmath.h>
 
       
              (返回值)
acos(弧度数)
求反余弦函数值
1.0471975
asin(弧度数)
求反正弦函数值
cont<<”asin0.5=”<<asin(0.5)<<edl
0.5235687
atan(弧度数)
求反余切函数值
cont<<”atan1=”<<atan(1)<<’\n’
0.7853981
atan2(YX)
atan()
cont<<atan2(3.4,34)<<endl
0.7853981
cos(弧度数)
求余弦函数值
cont<<acos(1.0471975)
0.5
cosh(弧度数)
求双曲余弦函数值
cont<<cosh()
ceil(浮点数)
上舍入返回最小整数.
double  dou1=3.14  int  k
k=ceil(dou1)  cont<<k
4
exp(浮点数d)
计算ed次方幂
cont<<exp(1)
2.71828
abs(整数值)
labs(整数值)
fabs(整数值)
求整型数的绝对值
求长整型数的绝对值
求浮点数的绝对值
int k=-2    cont<<abs(k)……
long l=-3663763  cont<<labs(l)
double f=-3.7367836 cont<<fabs(f)
2
3663763
3.736836
floor(浮点数)
下舍入返回最小整数.
double  dou1=3.94  int  k
k=floor(dou1)  cont<<k
3
fmod(x,y)
返回x/y的余数
cont<<fmod(7.6,2.5)<<endl
0.1
frexp(val,eptr)
double val
int *eptr
//该函数返回尾数x,
0.5<x<1
把双精度数val分解为尾数x和以2为底的指数,即val=x*2n次幂,并把n存放在eptr指向的变量中。
//返回数字部份x
int exp  double  x
double  x=frexp(48,&exp)
cont<<”尾数为”<<x<<endl
cont<<”指数为” <<exp<<endl
尾数为:0.75
指数为:6
//48=0.75*
      2^6
log(浮点数x)
ln(x)的值
cont<<log(2.71828)
1
log10(浮点数x)
log10(x)的值
cont<<log10(100)
2
modf(val,iptr)
double val
double *iptr
//该函数返回val的小数部份。
把双精度数val分解为整数部份和小数部份,把整数部份存到iptr指向的单元。
//返回val的小数部份
double d
double f=modf(3.1415926,&d)
cont<<”f=”<<f<<endl
cont<<”d=”<<d<<endl
0.1415926
3
pow(x,y)
double x
couble y
计算xy次幂。
cont<<pow(7,2)
49
sin(x)
计算sin(x).
cont<<sin(1)    //x为弧度值
0.841471
sinh(x)
计算x的双曲正弦值.
cont<<sinh(1)
sqrt(x)
计算x的平方根值
cont<<sqrt(49)  //x大于0
7
tan(x)
计算tan(x).
cont<<tan(0.785398)    // 相当于tan(PI/4)
1
tanh(X)
计算x的双曲正切值.
cont<<tanh(0.785398)