const
const对象只能调用const函数
const和指针
将const用于指针有两种方式。
一种是让指针指向一个常量对象,这样可以防止在使用该指针时修改所指向的值。
//指向常量的指针
int age = 18;
const int *pt = &age;
以上代码中pt指向了一个const int,也就是*pt的值为const,不能修改,但是可以直接修改age的值。
第二种是将指针本身声明为常量,这样可以防止指针指向的位置。
格式输出控制符
部分控制符可以单独加在常量后面表示格式,如1000000L,10000U。
控制符 | 含义 |
---|---|
%d | 十进制有符号整数 |
%u | 十进制无符号整数 |
%f | 浮点数 |
%s | 字符串 |
%c | 字符 |
%p | 指针值 |
%x | 无符号十六进制整数 |
%o | 无符号八进制整数 |
%g | 自动选择合适的方法 |
%ld | 长整型 |
%lf | duoble型浮点数 |
%3d | 输出3位的整数,不够3位右对齐 |
%9.2f | 一共9位数,小数点占1位,小数部分占2位,整数部分占6位 |
范围解析运算符
范围解析运算符“::”
析构函数
析构函数:~
在每次删除所创建的对象时执行。
析构函数名称和类名完全相同,在前面加“~”,没有返回值,不能带任何参数。
有助于跳出程序前释放资源(比如关闭文件,释放内存)。
友元函数
友元函数:friend
定义在类外部,但有权访问类的所有private和protected成员。
虽然友元函数在类的定义中出现,但是并不是成员函数。
friend可以修饰类也可以修饰函数
纯虚函数
纯虚函数是在声明虚函数时被“初始化”为0的函数,声明纯虚函数的一般形式是:virtual 函数类型 函数名(参数) = 0;
“= 0”并不表示函数返回值为0,只是在形式上的作用,作为一个标志。
extern “C”
extern “C”主要作用是实现C++代码正确调用C代码。加上extern “C”后,编译器编译这部分代码时,会按照C语言进行编译。因为C++支持函数重载,所以编译器编译C++代码时,会将参数类型一起编到编译后的代码中。但是C编译的时候只会将函数名编译到编译后的代码中。
- extern
extern是编程语言中的一种属性,表示变量、函数等类型的作用域属性,是一个关键字。编译器编译时extern告诉编译器它所声明的函数和变量已经在其他文件中定义,可以其他地方使用。通常在“.c”文件中声明定义变量或者函数,并在“.h”文件中使用该关键字限定变量或者函数,然后可在其他文件或者模块中用include使用,如:
//test1.c
//声明定义,定义时会为其分配空间
int i = 32;
//test1.h
//使用test.c中定义的i
extern int i;
//test2.c
//在其他文件中调用该变量
#include "test.h"
void fun(void){
if(i > 0){
print("test extern");
}
}
- “C”
多种编程语言会在使用时出现嵌套或者相互调用的情况。如C和C++之间就经常出现互相调用的。虽然C++是C的扩展,但是它们之间的编译器是不同的,这就产生了各自的编译器在对C和C++进行编译的时候要依据那一个作为大家都互相认可的规范或者约定。这就是“C”的出处,“C”就是这样一个约定:
- 这种调用编译是一种超链接
- 这种调用编译不能影响现有的编译规则
- C++是C的拓展
所以extern “C”中,extern表示关键字属性,在其他地方可以使用。“C”就表示了编译器的连接规范。合在一起就可以理解为在C++/C的混合编程下进行编译。
//如果使用的是C++,extern “C”有效,extern “C”中的代码使用C编译器
#ifdef __cplusplus
extern "C" {
#endif
...//需要使用C编译器的编译的代码
//结束使用C编译器
#ifdef __cplusplus
}
#endif