1.在包含自己的头文件时,应用“ ”而不是< >,如“coordin.h”; 文件名在“ ”中,编译器将先在当前工作目录或源代码目录中查找。
<iostream>, < >表示C++编译器将在存储标准头文件的主机系统的文件系统中查找。
2. 同一个文件中只能将同一个头文件包含1次
#ifndef COORDIN_H_
#define COORDIN_H_
....
#endif
3、自动存储持续性:(自动变量)在函数定义中声明的变量(包含函数参数)的存储持续性为自动的,它们在程序开始执行其所属的函数或代码块时被创建,执行完函数或代码块时,它们使用的内存被释放。自动变量它们占的内存称为栈,内存释放后,值没有被删除,但不在被标记,栈顶恢复到原来的位置。(代码块是指花括号{ }内包含的语句)
静态存储持续性:(静态变量)在函数定义外定义的变量和使用关键字static定义的变量的存储持续性为静态的,在程序的整个运行过程中都存在。编译器将分配固定的内存来存储静态变量。
动态存储持续性:(动态变量)用new运算符分配的内存一直都在,直到用delete运算符将其释放或程序结束,这种存储持续性为动态的,有时称为自由存储或堆。
4、C++变量的作用域有多种,
C++函数的作用域可以是整个类或整个名词空间(包括全局),但不能是局部(不能再代码块内定义函数)。
5. int main()
{
int tel; ...... //tel #1
{ int tel;..... } //tel #2, 在这可{ }代码块中tel #1被隐藏不可见,执行完该代码块后tel #1重新可见。
}
6. 关键字register:建议编译器用CPU寄存器来存储自动变量。
7.静态持续变量的3种链接性
int global=1000; //global在代码块外声明,有外部链接性,程序的其他文件可使用global;
static int one_file=50l; //one_file在代码块外声明,并用static限定符,有内部链接性,只能在包含上述代码的文件中使用one_file
int main() { ...}
void fun1 (int n){
static int count=0; //count在代码块内声明,并用static限定符,无链接性
int lama=0; //静态变量count和自动变量类似,只能在fun1 ()函数中使用。不同的是即使fun1 ()函数没有执行count也占内存
}
void fun2 (int q){ ....}
8.未被初始化的静态变量的所有位都被设置为0;
静态变量的初始化分为:静态初始化 和动态初始化。静态初始化(零初始化和常量表达式初始化)
静态初始化:编译后初始化 const double pi=4.0*atan(1.0);
9. 链接性为外部的变量称为外部变量。外部变量可以被程序中的多个文件使用,但每个使用外部变量的文件都要声明;但变量只能定义1次。因此有C++的两种声明:
定义声明:(定义)给变量分配存储空间
引用声明:(声明)不分配存储空间,使用关键字extern,不初始化,如果初始化了变为定义,分配存储空间
extern int blem; //声明,blem在其他地方定义
extern char gr='z'; // 定义gr,分配存储空间 double up; //定义up
10. 用const全局变量链接性为内部的。但可以用extern关键字来覆盖默认的内部链接性。
extern const int state=34; //有外部链接性
11.所有函数的存储持续性都是静态的,默认情况下,函数的链接性都是外部的。可以用extern(也可不用)指出函数在另一个文件中定义,还可以用static将函数链接性设置为内部,使之只能在一个文件中使用。
12. 使用new初始化: int * ar=new int[4] {2,6,7,3} ;
用new和new[] 调用函数:
void * operator new(std::size_t) ; //size_t是一个typedef,对应于合适的整型。 释放函数:void operator delete(void *)
void * operator new[] (std::size_t) ; 释放函数:void operator delete [] (void *)
定位new运算符:
char buffer[500];
p1=new (buffer) int[20] ;// 将Int数组放置在buffer。
此时不需要delete [] p1; 因为buffer处于delte管辖之外。
13.创建名称空间的关键词 namespace, 任何名称空间中的名称不会与其他名称空间的名称冲突(不同名称空间可以用相同的名称)
namespace Jack{ double pail; void fetch(); int pal; }
访问名称空间的名称用作用域解析运算符 :: 如Jack::pail=12.34; 包含名称空间的名称Jack::pail称为限定名称
14.using声明使特定的标识符可用: using Jack::fetch; 完成该声明后,在有效区域可用fetch代替Jack::fetch
using编译指令使整个名称空间可用:using namespace Jack;名称空间所有名称都可用,不用作用域解析运算符 ::
15.未命名的名称空间可替代链接性为内部的静态变量:
函数外声明:static int counts;
可写为函数外声明 : namespace { int counts; }
16.一个文件中调用average(3,6)函数,返回两个int参数的int平均值,在同一个程序的另一个文件中调用,它返回返回两个int参数的double平均值,实现方法:
在每个文件中包含单独的静态函数定义,或每个文件在未命名的名称空间(上面的15)中定义一个合适的average()函数