C++简明提要
C++数据类型
C++运算符
C++类
C++语句
C++库函数
C++常用的其它函数
罗伟
2001年4月1日
C++数据类型
数据类型 | 说 明 | 数值范围 | 示 例 |
bool | 布尔类型值 | true或false | bool Myb1,Myb2; Myb1=true; Myb2=i<k; |
char | 单字符单字节整型数 | -128至127或0至255 | char ch1,ch2; ch1=’A’; ch2=65; //本例中ch1=ch2 char message1[20]=”HI!”; char message2[]=”I love you” |
unsigned char | 单字节无符号整型数 | 0至255 或 0x0至0Xff | //定义(数组)变量Buffer1[1000]来存放二进制数据缓冲区。 unsigned char Buffer1[1000]; |
signed char | 单字节整型数 | -128至127 | signed char Buffer2[2000]; |
int | (2或)4字节整型数 | 同short或 long相同 | int I ,k; I=0; k=100; int N=1; |
unsigned int | 无符号整型数 | 0至65535 | 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字节无符号整型数 | 0至65535 | unsigned I,k; I=2; k=2; unsigned n=5; |
long | 4字节整型数 | 正负20亿之间 | long I; I=-123456; long k=1000L; |
unsigned long | 4字节无符号整型数 | 0至40亿 | unsign long I=800000; |
float | 单精度浮点数 | -3.4*10e38至 3.4*10e38 | float x1,y1; x1=0.000F;y1=3.1415926F; float z1=3.2e-9F; float z2=2.828E14F; |
double | 双精度浮点数 | -1.8*10e308至1.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 f1;char 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,b和totle; com operation+(com c,com d ) {com temp; al; //real及imag 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 语句 | 格式1:if (逻辑表达式) {语句} 格式2:if (...) 语句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<<”asin(0.5)=”<<asin(0.5)<<edl; | 0.5235687 |
atan(弧度数) | 求反余切函数值 | cont<<”atan(1)=”<<atan(1)<<’\n’; | 0.7853981 |
atan2(Y,X) | 同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) | 计算e的d次方幂 | 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*2的n次幂,并把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; | 计算x的y次幂。 | 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); | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论