C++语言基础
一、C++文件的构成
1、头文件
在创建MFC应用时,类向导会为每个头文件添加宏定义,例如:
#if !defined(AFX_ODBCVIEW_H__B82AC4A2_3DBE_4A29_A549_F9939BE498E3__INCLUDED_)
#define AFX_ODBCVIEW_H__B82AC4A2_3DBE_4A29_A549_F9939BE498E3__INCLUDED_
宏定义的目的是防止头文件被重复引用,当编译器编译头文件时,判断当前宏是否被定义,若没定义则进行定义,并编译头文件,否则略过当前头文件
a、引用头文件
使用<>格式引用系统的头文件,例如#include <iostream.h>
使用""格式引用自定义头文件,例如#include "student.h"
b、头文件中只提供声明信息
C++中允许使用内联函数,将函数的声明和实现放在一起,但是,这样做不容易形成一套风格,建议在头文件中只提供声明信息,在源文件中提供实现信息,使程序的逻辑结构更加清晰
2、源文件
以.cpp为扩展名,源文件中通常包含3部分内容,即源文件版权,版本的声明,对头文件的引用,以及系统功能的实现代码
二、C++的基本要素
1、标识符
在C++语言中,变量、常量、函数、标签和用户定义的各种对象,被称之为标识符
标识符由一个或多个字符组成,标识符可以是字母、数字或下划线,但是标识符的首字母必须是字母或下划线,而不能是数字
标识符是区分大小写的,且不能与C++中的关键字同名
标识符的长度是任意的,但前1024个字符是有意义的
a、不同类型的对象使用类型作为标识符的前缀
例如:我们定义了一个整型变量,为了表示变量的类型,使用小写字符n做为前缀
int nAge;//年龄
int nKindCout;//种类数量
b、成员变量使用m_作为前缀
在定义类的成员变量时,成员变量以m_作为前缀,例如:
m_nAge;
m_nSize;
c、类名以C作为前缀
例如:class CStudent;
class CPerson;
d、全局对象以g_作为前缀
例如:g_Connection;
g_Recordset;
e、接口以I为前缀
例如:IUnknown;
IInte易做图ce;
2、关键字
关键字是C++编译器内置的有特殊意义的标识符,用户不能定义与关键字相同的标识符,在VC中,关键字默认都是以蓝色显示的
3、常量
常量,顾名思义,其值在运行时是不能改变的,但是在定义常量时可以设置初始值,在C++中可以使用const来定义一个常量,例如:const int nMaxValue=1100;
对于常量,编译器会将其放置了一个只读的内存区域,其值不能被修改,但是可以应用在各种表达式中,如果用户试图修改常量,编译器将提示错误
4、变量
其值可以改变的量叫变量,变量提供了一个具有名称(变量名)的存储区域,使得开发人员可以听过名称来对存储区域进行读写。每一个变量,都具有两个属性,也就通常所说的左值和右值,所谓左值,是指变量的地址值,即存储变量值的内存地址,右值是指变量的数据值,即内存地址中存储的数据。
例如:int a,b,c;
变量初始化,即为其设置初始值
例如:int a=10;
5、变量的存储类型
a、extern存储类型
在此之前,先搞明白,变量的声明和定义
变量的声明:是告知编译器变量的名称和数据类型
变量的定义:将为变量分配存储区域
使用extern关键字定义的变量:表示该变量只声明而不定义。
例如:extern int var;
好处:在一个应用程序包含多个文件时,如果在一个文件中定义一个全局变量,若其他文件中要访问该全局变量,则在另一个文件中通过使用关键字extern声明该全局变量,那么在该文件中就可以访问该全局变量了。
例如:一个文件中定义一个整型的全局变量var; int var=0;
而在另一个文件中通过extern关键字声明全局变量var,在该文件中就可以访问全局变量var了。extern int var;
b、static存储类型
在此之前,先明白,局部变量和全局变量
局部变量:是指在函数内定义的变量,在函数调用结束后,局部变量将消失
全局变量:是指在函数体外定义的变量,它的声明周期随着程序的结束而结束
static存储类型主要是针对局部变量的,如果定义一个静态的局部变量,它的声明周期在函数调用结束后依然存在,下次调用函数时,会依然保存上一次函数调用之后的值,并且,对于静态变量只执行一次初始化
static存储类型表示变量在函数或文件内是“持久性”变量,通常也被称为静态变量。
全局静态变量:使用static在函数外部定义的变量,它的作用域仅限于当前定义的文件,不能够被其他文件使用extern关键字访问,可以认为静态全局变量为半个全局变量(不能够被其他文件共享)
局部静态变量:使用static在函数内部定义的变量,当函数调用结束时,变量并不被释放,依然保留其值,当下一次调用函数时,将应用之前的变量值,它的作用域时当前函数,它不能被外部函数或文件访问。
c、register存储类型 www.zzzyk.com
使用register关键字定义的变量,表示变量将被放置在CPU的寄存器中。访问的时候比普通的变量快,register变量只能用于局部变量或作为函数的形式参数、而不能够定义全局的register,例如:
register int slocal=10;
对于寄存器变量,程序中不能获得变量的地址,也不能够称为全局变量和静态变量。但可以作为函数的形式参数
d、auto存储类型
变量的存储方式主要有两种,静态存储和动态存储。
全局变量、静态变量均属于静态存储,而普通的局部变量属于动态存储
auto关键字表示变量被动态存储,默认情况下的局部变量均属于auto变量(也称为自动变量),定义一个全局的auto变量是非法的,因为全局变量属于静态存储,与auto变量相互冲突
注意:在定义变量时,不能同时使用register、extern、static和auto4个关键字中的任意两个关键字。