首页 > 代码库 > 开始了解C++基础概念语法
开始了解C++基础概念语法
C++程序的内存格局通常分为四个区:
(1)全局数据区(data area)
存放全局变量、静态数据、常量。
(2)代码区(code area)
存放类成员函数、其他函数代码。
(3)栈区(stack area)
存放局部变量、函数参数、返回数据、返回地址。
(4)堆区 (heap area) 。
自由存储区。
一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。
一个简单的C++程序如下:
#include <iostream> //包含头文件iostream
using namespace std; //使用命名空间std
int main( )
{
cout<<″This is a C++ program.″;
return 0;
}
文件iostream的作用是向程序提供输入或输出时所需要的一些信息。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时就需要用#include命令行),就需要用“using namespace std; ”作声明,表示要用到命名空间std中的内容。
一、输入、输出和函数声明
C++的输出和输入是用“流”(stream)的方式实现的。有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中:
#include <iostream>
尽管cin和cout不是C++本身提供的语句,但是在不致混淆的情况下,为了叙述方便,常常把由cin和流提取运算符“>>”实现输入的语句称为输入语句或cin语句,把由cout和流插入运算符“<<”实现输出的语句称为输出语句或cout语句。
cout语句的一般格式为
cout<<表达式1<<表达式2<<……<<表达式n;
cin语句的一般格式为
cin>>变量1>>变量2>>……>>变量n;
cin>>a>>b; //输入的两个数据间用一个或多个空格间隔,不能以逗号或其他符号间隔。
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或′\n′,ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。一个cout语句可以分写成若干行。一个cin语句可以分写成若干行。
不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以用getchar函数。如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。
setw只对其后一个输出项有效。而setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2)对其后输出的每一项均有效。putchar函数(字符输出函数) getchar函数(字符输入函数)使用数学函数时要包含头文件cmath。else总是与它上面最近的、且未配对的if配对
只要在被调用函数的首部的末尾加一个分号,就成为对该函数的函数声明。函数声明的位置应当在函数调用之前,可以放在另外一个函数之中如
int main( )
{ int max(int x,int y); //对max函数作声明
int a,b,c;
cin>>a>>b;
c=max(a,b);
cout<<″max=″<<c<<endl;
return 0;
}
int max(int x,int y) //定义max函数
{ ...
}
也可将函数申明放在main函数之外。
可以在函数声明中定义函数的默认参数,也可以在定义函数时再定义默认参数。如果在函数声明中定义了默认参数,则在定义函数时,可以不再指定默认参数。
C++一个类是由一批数据以及对其操作的函数组成的。类可以体现数据的封装性和信息隐蔽。把类中的数据和函数分为两大类: private(私有的)和public(公用的)在大多数情况下,会把所有数据指定为私有,以实现信息隐蔽。
如
class Student // 声明一个类,类名为Student
{private: // 以下为类中的私有部分
int num; // 私有变量num
public: // 以下为类中的公用部分
void setdata( ) // 定义公用函数setdata
{cin>>num; // 输入num的值
}
二、一些相关的语法
1、在整型符号int和字符型符号char的前面,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号,全部二进制位都用来表示数值本身。
在一个整型常量后面加一个字母l或L,则认为是long int型常量。例如123L,421L,0L等,在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。如020表示这是八进制数20。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式表示的常数。如0X20表示这是十六进制数20。
用单撇号括起来的一个字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在内存中占一个字节。注意: ①字符常量只能包括一个字符,如′AB′ 是不合法的。②字符常量区分大小写字母,如′A′和′a′是两个不同的字符常量。③撇号(′)是定界符,而不属于字符常量的一部分。如cout<<′a′;输出的是一个字母“a”,而不是3个字符“′a′ ”。将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。用双撇号括起来的部分就是字符串常量,如″abc″编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志。
如字符串常量″abc\n″包含几个字符?不是5个而是4个字符,其中“\n”是一个转义字符,但它在内存中占5个字节(包括一个“\0”字符) 。编译系统遇到“\”时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。如果“\”后面的字符不能与“\”组成一个合法的转义字符(如″\c″),则在编译时显示出错信息。如果希望将“\”字符也作为字符串中的一个字符,则应写为″abc\\n″,此时字符包括5个字符,即a,b,c,\,n。如果在一个字符串中最后一个字符为“\”,则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格
在C++中,大写字母和小写字母被认为是两个不同的字符
请区别用#define命令定义的符号常量和用const定义的常变量。符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。而常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。用#define命令定义符号常量是C语言所采用的方法,C++把它保留下来是为了和C兼容。C++的程序员一般喜欢用const定义常变量。虽然二者实现的方法不同,但从使用的角度看,都可以认为用了一个标识符代表了一个常量。
关于“结合性”的概念在其他一些高级语言中是没有的,是C和C++的特点之一。
2、赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。
(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃其小数部分。
(2)将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。
不同类型的整型数据间的赋值归根结底就是一条:按存储单元中的存储形式直接传送。C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。这是C++语言灵活性的一种表现
逗号表达式的一般形式为 表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。
3、C++语句可以分为以下4种:
1.声明语句
如int a,b;在C语言中,只有产生实际操作的才称为语句,对变量的定义不作为语句。在C++中,对变量(以及其他对象)的定义被认为是一条语句,并且可以出现在函数中的任何行。
2.执行语句
通知计算机完成一定的操作。执行语句包括:
(1) 控制语句
① if( )~else~ (条件语句)
② for( )~ (循环语句)
③ while( )~ (循环语句)
等
(2) 函数和流对象调用语句。函数调用语句由一次函数调用加一个分号构成一个语句,例如
sort(x,y,z); //假设已定义了sort函数,它有3个参数
cout<<x<<endl; //流对象调用语句
(3) 表达式语句。由一个表达式加一个分号构成一个语句。最典型的是: 由赋值表达式构成一个赋值语句。
i=i+1 //是一个赋值表达式
i=i+1; //是一个赋值语句
任何一个表达式的最后加一个分号都可以成为一个语句。
3. 空语句
下面是一个空语句:
;
即只有一个分号的语句,它什么也不做。有时用来做被转向点,或循环语句中的循环体。
4. 复合语句
可以用 { }把一些语句括起来成为复合语句。如下面是一个复合语句。
{ z=x+y;
if(z>100) z=z-100;
cout<<z;
}