【C++总复习】第1章----C++对于C的扩展

一、C++对C的扩充

1.C++的输入输出

1.1用cout输出

cout<<"Hello World!!!\n";
//将Hello World!!!打印在屏幕上并换行
cout<<"Hello World!!!"<<endl;
//将Hello World!!!打印在屏幕上并换行

1.2用cin进行输入

int a;
float b;
cin<<a<<b;//从键盘中以此读入以空格分开的数字放入a b变量中,

2.C++定义常变量

2.1C语言常用#define定义常量

#define PI 3.1415926

注意:实际上编译器在预编译时将程序中出现的字符串PI全部替换成3.1415926,预编译之后,不再有PI这个标识符,PI不是变量,没有类型,不占用存储单元。

2.2C++语言常用const定义常变量

const float PI = 3.1415926;

注意:PI是常变量,有数据类型,占用内存空间,有地址,可以用指针指向它,可以理解为程序运行期间值不可以改变的变量。

3.函数原型声明

3.1C语言的函数声明

int max(int x,int y);
int max();
max();		//若max返回值为整形,可以省略

3.2C++的函数声明

C++中,如果调用函数在函数定义之前,必须对调用的函数作函数声明的严格检查
声明形式:函数类型 函数名(参数列表)

int max(int x,int y);
int max(int ,int );

4.函数的重载

函数重载:在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名函数用来实现不同的功能,即一函数名多用。
C++将C语言中的“<<”和“>>”左右移运算符进行了重载,变成了输入输出运算符,这称为运算符的重载

函数重载条件:
①作用域相同
②函数名相同
③参数个数不同或者参数类型不同

例:求三个数中的最大数(分别考虑整数、实数、长整数情况)

int max(int a,int b,int c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
float max(float a,float b,float c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
long max(long a,long b,long c){
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}

5.函数模板

函数模板:建立一个通用模板,它的函数类型和参数类型不具体指定,用一个虚拟的类型来取代,这个通用的函数就称为函数模板。
优点:用一个模板函数取代了函数重载中的多个函数,减少了代码的冗余。
例:求三个数中的最大数(分别考虑整数、实数、长整数情况)

template <typename T>	//模板声明,T为虚拟类型
//template<class T>		//模板声明的另一种形式
T max(T a,T b,T c){		//定义一个通用函数,用T作虚拟类型名
	if(b > a) a = b;
	if(c > a) a = c;
	return a
}
void fun(T x,T y){

}

使用函数模板的条件:参数个数相同

6.有默认参数的函数

简单来说就是可以给函数形参列表中的变量赋初始值,调用函数时可以不传入实参
要求:
①有默认值的形参必须位于无默认值的形参之后
②调用有默认参数的函数时,传入的实参个数必须大于等于无默认值得形参个数

void fun1(int a = 0, int b,int c = 3)//错误
void fun2(int b,int a = 0int c = 3)//正确

fun2()//传入的实参个数为0,不合法
fun2(3);//合法
fun2(3,4);//合法
fun2(3,4,5);//合法

③一个函数不能同时作为重载函数和有默认值的函数,会引发二义性,系统无法执行

int max(int a,int b,int c = 100){}
int max(int a,int b){}

max(1,2)//产生二义性,系统无法确定调用的是哪一个函数

7.变量的引用

变量的“引用”(reference)就是给变量取一个别名

int a = 10;
int &b = a;	//这里b就是a的引用变量

图解:
在这里插入图片描述
这里对b进行操作就相当于对a进行操作,这里a、b共享同一片内存地址,内存中存的是10,不过是同一片内存地址的两个名字,分别叫a、b

作为函数形参,作用类似于指针

void swap(int *a,int *b){	//利用指针交换两个数
	int temp = *a;
	*a = *b;
	*b = temp;
}
void swap(int &a,int &b){	//利用引用交换两个数
	int temp = a;
	a = b;
	b = temp;
}

使用引用需要注意
①声明引用必须对它初始化,即将它与另一个变量联系起来

int a = 10;
int &b;			//不合法,未初始化
int &c = a;		//合法

②一旦引用被初始化,它便不能再次引用其他变量

int a = 10;
int b = 10;
int &c = a;
int &c = b;		//不合法,c已经是a的别名了

③const修饰引用后,不能通过引用修改值,但是可以通过原来的变量修改值

int a = 10;
const int &b = a;
b = 20;		//不合法,b被const修饰,无法改变其中的值
a = 20;		//合法,a未被const修饰,可以改变其中的值

8.内置函数(内联函数)

问:为什么有内联函数?
答:由于在主函数中调用其他函数需要函数压栈,函数调用完后需要函数弹栈,会消耗一定时间,使用内联函数可以提高代码运行效率。
内置函数的解释:内置函数相当于将函数镶嵌到函数调用的位置,可以内置函数看成,在函数内部的一个函数,只不过这个函数代码写在函数外部。
关键字:inline

inline int sum(int a,int b){
	return a+b;
}
int main(){
	int Sum = sum(3,6);
	return 0;
}
//相当于:
int main(){
	int a = 3;
	int b = 6;
	int Sum = a+b;
	return 0;
}

上述代码运行时,编译器会将内联函数看成主函数中的一部分代码,从而省去了sum函数的压栈弹栈时间,提高了效率

9.作用域运算符::

每一个变量都有其有效的作用域,只能在变量的作用域内使用该变量,不能直接使用其他域中的变量

float a = 13.6;
int main(){
	int a = 5;
	cout<<a<<endl;//输入main函数中的局部变量a
	cout<<::a<<endl;//输出全局变量a
	return 0;
}

C++提供作用域运算符“::”来指定所需要的的作用域,“::”不可以用来访问函数中的局部变量

10.字符串类型

字符串类型博客

11.动态分配内存

动态分配内存博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章