学习C++的一点总结
1.头文件管理
在同一个文件中只能将一个头文件包含一次,但在不知情的情况下可能犯错误。
C++有一种技术可以避免。它是基于预编译指令#ifndef(if not define)的。下面为代码段
#ifndef BANKUN_H_ //起一个不容易重复的名字,具有唯一性
#define BANKUN_h_
........中间的就是你的头文件内容
#endif //结束语句
2.存储连续性,作用域,链接性
2.1 自动存储连续性
这种声明的变量是自动的,程序开始执行所属函数或代码块时被创建,执行结束时,它使用的内存自动被释放。
它的作用域为局部,仅限于函数和代码块内。无链接性。
int main()
{
int i=1;//i即为这种自动变量,代码块结束时,变量消失。
cout<<i<<endl;
}
执行到代码块或函数时,代码块中的变量会隐藏同名的外部变量,函数或代码块结束时外部变量重新出现。
2.2静态持续变量
它有3种链接性,这3种链接性都在整个程序执行期间存在。
(1).外部链接性,这种链接性的实现必须在代码块的外面声明,int global=1000000;作用域为整个文件,程序的其他文件也可使用它,extern int global;
这里只是引用原来的变量,global的内存没有变化,因此也不能重新初始化赋值(extern int global=10;是错误的)。仅当声明为变量分配内存空间时,才能在声明中初始化。
可以使用const保护全局变量,禁止修改,const char * const months[12 ]={ ............};第一个const防止字符串修改,第二个const确保数组中每个指针指向他最初指向的字符串。
(2).内部链接性
同样必须在代码块外面声明static int intern1=100;必须加上static限定符。这种变量只能在所属的文件中使用。作用域为所属整个文件。
(3).无链接性
将限定符static用于代码块中定义变量。该变量只能在代码块内部使用,不过在代码块不活动时依然存在。在两次函数调用之间,此静态变量将保持不变,仅在程序启动时进行一次初始化,以后调用不在初始化,其值保持不变,可以用于调用一次累加一次值。
int global=1000000;//外部链接,全局变量
static int intern1=100;//内部链接
int main()
{
static int count=0;//无链接
}
3,new 操作符
3.1常规new
pd1=new int;
delete pd1;
pd2=new double[N];
delete [ ] pd2;
分配与释放;
3.2布局new
char buffer[255];
pd3=new (buffer)double[5];
释放这种对象时,不能调用delete[]pd3,用于类时应直接调用析构函数,否则不用delete释放。
4名称空间
C++提供名称空间为了更好的控制名称的作用域。名称空间可以是全局的,也可以位于另一个名称空间,但不能位于代码块中。默认情况下,链接性为外部。
有两种不同的声明方式。
namespace Jack{
double pail;
void fetch;
int pal;
}
(1)using声明 using Jill::fetch;
(2)using编译指令 using namespace Jack;
一般来说using声明比使用using编译指令更安全,这是由于他只导入指定的名称。如果该名称与局部名称发生冲突,编译器会发出指示。using编译指令导入所有名称,包括可能不需要的名称。如果与局部名称发生冲突,则局部名称将覆盖名称空间版本,而编译器不会发出警告。
5名称空间极其前途
(1)使用在已命名的名称空间中声明的变量,而不是外部全局变量和静态全局变量。
(2)不要在头文件中使用using编译指令。
(3)导入名称时,首选使用作用域解析操作符或using声明方法。
(4)对于using声明,首选作用域设置为局部而不是全局。