C++对C的扩展

一、::作用域运算符

C++对C的扩展_局部变量
C++对C的扩展_函数重载_02

二、名字控制

C++对C的扩展_函数重载_03

1.C++命名空间(namespace)

C++对C的扩展_函数重载_04

2.命名空间使用语法

C++对C的扩展_局部变量_05
C++对C的扩展_局部变量_06
C++对C的扩展_数组_07
C++对C的扩展_函数重载_08

3.using声明

C++对C的扩展_函数重载_09
C++对C的扩展_数组_10

4.using编译指令

C++对C的扩展_函数重载_11
C++对C的扩展_c++_12
C++对C的扩展_局部变量_13

5.命名空间使用

C++对C的扩展_局部变量_14

三、全局变量检测增强

C++对C的扩展_数组_15

四、C++中所有的变量和函数都必须有类型

c语言代码:

//i没有写类型,可以是任意类型
int fun1(i){
	printf("%d\n", i);
	return 0;
}
//i没有写类型,可以是任意类型
int fun2(i){
	printf("%s\n", i);
	return 0;
}
//没有写参数,代表可以传任何类型的实参
int fun3(){ 
	printf("fun33333333333333333\n");
	return 0;
}

//C语言,如果函数没有参数,建议写void,代表没有参数
int fun4(void){
	printf("fun4444444444444\n");
	return 0;
}

g(){
	return 10;
}

int main(){

	fun1(10);
	fun2("abc");
	fun3(1, 2, "abc");
	printf("g = %d\n", g());

	return 0;
}

C++对C的扩展_内联函数_16

五、更严格的类型转换

C++对C的扩展_c++_17

六、struct类型加强

C++对C的扩展_内联函数_18

七、 “新增”bool类型关键字

C++对C的扩展_数组_19

八、三目运算符功能增强

C++对C的扩展_函数重载_20
C++对C的扩展_局部变量_21

九、C/C++中的const

1.const概述

C++对C的扩展_数组_22

2.C/C++中const的区别

C中的const

C++对C的扩展_c++_23

C++中的const

C++对C的扩展_函数重载_24

C/C++中const异同总结

C++对C的扩展_局部变量_25
C++对C的扩展_c++_26
C++对C的扩展_局部变量_27
C++对C的扩展_内联函数_28
C++对C的扩展_c++_29
C++对C的扩展_局部变量_30

3.尽量以const替换#define

C++对C的扩展_内联函数_31
C++对C的扩展_函数重载_32
C++对C的扩展_数组_33

十、引用(reference)

1.引用基本用法

C++对C的扩展_c++_34
C++对C的扩展_内联函数_35

//1. 认识引用
void test01(){

	int a = 10;
	//给变量a取一个别名b
	int& b = a;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "------------" << endl;
	//操作b就相当于操作a本身
	b = 100;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "------------" << endl;
	//一个变量可以有n个别名
	int& c = a;
	c = 200;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "c:" << c << endl;
	cout << "------------" << endl;
	//a,b,c的地址都是相同的
	cout << "a:" << &a << endl;
	cout << "b:" << &b << endl;
	cout << "c:" << &c << endl;
}
//2. 使用引用注意事项
void test02(){
	//1) 引用必须初始化
	//int& ref; //报错:必须初始化引用
	//2) 引用一旦初始化,不能改变引用
	int a = 10;
	int b = 20;
	int& ref = a;
	ref = b; //不能改变引用
	//3) 不能对数组建立引用
	int arr[10];
	//int& ref3[10] = arr;
}

	//1. 建立数组引用方法一
	typedef int ArrRef[10];
	int arr[10];
	ArrRef& aRef = arr;
	for (int i = 0; i < 10;i ++){
		aRef[i] = i+1;
	}
	for (int i = 0; i < 10;i++){
		cout << arr[i] << " ";
	}
	cout << endl;
	//2. 建立数组引用方法二
	int(&f)[10] = arr;
	for (int i = 0; i < 10; i++){
		f[i] = i+10;
	}
	for (int i = 0; i < 10; i++){
		cout << arr[i] << " ";
	}
	cout << endl;

2.函数中的引用

C++对C的扩展_局部变量_36

//值传递
void ValueSwap(int m,int n){
	int temp = m;
	m = n;
	n = temp;
}
//地址传递
void PointerSwap(int* m,int* n){
	int temp = *m;
	*m = *n;
	*n = temp;
}
//引用传递
void ReferenceSwap(int& m,int& n){
	int temp = m;
	m = n;
	n = temp;
}
void test(){
	int a = 10;
	int b = 20;
	//值传递
	ValueSwap(a, b);
	cout << "a:" << a << " b:" << b << endl;
	//地址传递
	PointerSwap(&a, &b);
	cout << "a:" << a << " b:" << b << endl;
	//引用传递
	ReferenceSwap(a, b);
	cout << "a:" << a << " b:" << b << endl;
}

C++对C的扩展_函数重载_37

//返回局部变量引用
int& TestFun01(){
	int a = 10; //局部变量
	return a;
}
//返回静态变量引用
int& TestFunc02(){	
	static int a = 20;
	cout << "static int a : " << a << endl;
	return a;
}
int main(){
	//不能返回局部变量的引用
	int& ret01 = TestFun01();
	//如果函数做左值,那么必须返回引用
	TestFunc02();
	TestFunc02() = 100;
	TestFunc02();

	return EXIT_SUCCESS;
}

C++对C的扩展_局部变量_38

3.引用的本质

C++对C的扩展_内联函数_39

4.指针引用

C++对C的扩展_函数重载_40
C++对C的扩展_数组_41

5.常量引用

C++对C的扩展_函数重载_42
C++对C的扩展_函数重载_43

十一、内联函数(inline function)

1.内联函数的引出

C++对C的扩展_内联函数_44

2.预处理宏的缺陷

C++对C的扩展_c++_45
C++对C的扩展_局部变量_46

3.内联函数

内联函数基本概念

C++对C的扩展_函数重载_47

类内部的内联函数

C++对C的扩展_内联函数_48

内联函数和编译器

C++对C的扩展_c++_49
C++对C的扩展_局部变量_50

十二、函数的默认参数

C++对C的扩展_内联函数_51
C++对C的扩展_函数重载_52

十三、函数的占位参数

C++对C的扩展_c++_53

十四、函数重载(overload)

1.函数重载概述

C++对C的扩展_局部变量_54

2.函数重载

函数重载基本语法

C++对C的扩展_局部变量_55
C++对C的扩展_内联函数_56

函数重载实现原理

C++对C的扩展_内联函数_57

3.extern “C”浅析

C++对C的扩展_函数重载_58
C++对C的扩展_函数重载_59
C++对C的扩展_c++_60
C++对C的扩展_函数重载_61