01.bool类型
- 用来描述真假 True or False
- 非0为真
02.内联函数
- 通过“内存膨胀”的方式,以空间换取时间,目的是提高程序运行速度
- 定义和使用方式只是在普通函数的前面加上inline,如下:
-
inline 返回值类型 函数名(参数表) { 函数体; }
评价:占用空间少的函数可以用,占用空间大的函数不建议用。
03.函数重载
- 同一个项目中定义的函数名字可以重复
- 函数名必须一致&&参数列表不同,避免二义性
-
#include<stdio.h> int func(int n){ } float func(float n){ } void func(double n){ } int main() { func(3.14);//匹配double类型的func函数 func(3);//匹配int类型的func函数 func(3.14f);//匹配float类型的func函数 return 0; }
04.函数参数缺省
- 声明函数时,为一个形参指定一个默认值,调用函数时,在形参对应的实参位置可以省略,返回值为默认值,如代码注释【#1】位置
- 传参顺序是从前向后的,【#2】位置,num先得到6,val后得到3.14f,因此缺省参数时,必须以从后向前的顺序给形参默认值
- 如果要先声明函数,后定义函数,那么默认值只在声明时给,定义时不需要给
-
#include <stdio.h> void function(int num, float val = 0.0f)//【#2】 { printf("num=%d,val = %f\n", num, val); } int main() { function(6, 3.14f);//num=6,val = 3.140000【#2】 function(8);//num=8,val = 0.000000 【#1】 }
05.引用
- 对一个变量或对象取别名
- 定义引用的时候必须要初始化(告诉编译器是给谁取的别名)
- 引用和原名的用法是完全相同的,变量类型和指向的内存地址都相同
- 解析引用符&起标志作用,说明是引用名
-
#include <stdio.h> int main() { int num = 0; int& dd = num;//dd现在就是num的别名 printf("num=%d\n", num); dd = 10; printf("num=%d\n", num);//num=10 }
06.命名空间*
-
命名空间是用来组织和重用代码的编译单元(重用代码指代码的重复使用)
-
作用:通过命名空间来避免冲突,解决重名现象
-
作用域符号 ::
-
可以在全局定义命名空间,也可以在局部定义,在命名空间里面定义命名空间,虽然可以嵌套定义,不能在函数里面定义命名空间
-
【#2】位置定义的NAME_1空间和【#1】命名空间是相同的,这也叫做命名污染,在不同的地方可以利用它完善命名空间
-
命名空间名字太长不方便记忆时可以给它取别名
-
#include <stdio.h> namespace NAME_1//【#1】 { int num=10; float val; void func_1() { printf("func_1\n"); } void func_2(); }//作用域不用加分号 namespace NAME_1//【#2】 { char ch; } namespace N=NAME_1;//给命名空间可以取别名 void NAME_1::func_2() { printf("func_2\n"); } struct Mystruct { };//属于定义域需要加分号 int main() { int num = 9; printf("num=%d\n", num); printf("num=%d\n", NAME_1::num);//num=10 }
07.cin和cout
- cin的作用类似scanf
- cout的作用类似printf
- 他们在具体使用的时候有些区别
#include <iostream> int main() { int num ; std::cin >> num; std::cout << num << std::endl; }
-
当想省略在cin和cout前多次引用命名空间std时可以在全局声明std命名空间
-
#include <iostream> //using namespace std; //使用更小的命名空间 using std::cin; using std::cout; using std::endl; int main() { int num ; cin >> num; cout <<"num=" << num << endl; int a, b, c, d, e, f; cin >> a >> b >> c >> d >> e >> f; cout << a << b << c << d << e << f << endl; return 0; }
08.new 和 delete
- new 的作用类似malloc,申请内存
- delete 的作用类似free,释放内存
- 释放连续内存时,只能向后释放,因此delete后面要跟首地址,否则不能完全释放
-
#include <iostream> using namespace std; int main() { //1.申请单个内存 int* p1 = new int;//申请int类型内存赋值给指针 *p1 = 0; //2.申请单个内存且初始化 int* p2 = new int(999);//括号里是初值 cout << "*p2=" << *p2 << endl; //3.批量申请,连续的内存 int* p3 = new int[10]; for (size_t i = 0; i < 10; i++) { p3[i] = i; cout << "p3[" << i << "]=" << p3[i] << endl; }; return 0; delete p1; delete p2; delete[] p3;//加中括号连续释放批量申请的内存 }