C++基础第一章

一.1,函数的重载

在c++中相同的函数名可以实现不同的功能。就是一个函数名多用

第一种,类型不同可以重载例如

int max(int a, int b, int c)
double max(double a, double b, double c)
long max(long a, long b, long c)

但是  void  和其他类型的就不能重载

void max(int a, int b, int c)
int max(int a, int b, int c)

第二种,传递参数的个数不一样

int max()
int max(int a, int b)
int max(int a, int b, int c)

但是像下面这种就不可以

int max()
int max(int n = 4)

因为当主函数调用max函数时  第二个函数也可以不传递参数  这时计算机就不知道要调用哪个函数。

第三种,传递函数顺序不同

int max(int a, double b)
int max(double a, int b) 

三种函数的重载 , 请大家牢记,不过记不住也没有关系,直接敲一下试一试

一.2,函数模板

定义函数模板的一般形式为

template<typename T>   或   template<class T> 

class 和 typename 一样 二者可以互换

#include<iostream>
using namespace std;
template <typename T>//这个 T 是我随便起的名字。你也可以随便起个 

T max(T a, T b, T c)
{
	if( b > a)
		a = b;
	if( c > a )
		a = c;
	return a;
}  


int main(){
	int a1 = 1, b1 = 2, c1 = 3, sum1;
	double a2 = 2.1, b2 = 3.1, c2 = 4.1, sum2;
	long a3 = 545678, b3 = -456, c3 = 4564657, sum3;
	
	sum1 = max(a1, b1, c1);		//调用模板函数时,此时 T 被 int取代 
	sum2 = max(a2, b2, c2);		//调用模板函数时,此时 T 被 double取代 
	sum3 = max(a3, b3, c3);		//调用模板函数时,此时 T 被 long取代 
	
	cout << sum1 << endl;
	cout << sum2 << endl;
	cout << sum3 << endl;
} 

 一.3,有默认参数的函数

这个就更简单了

void f1(float a, int b = 0, int c, char d = "c")    //不正确
void f2(float a, int c, int b = 0, char d = "c")    //正确



f2(3.5, 3, 5, 'x');		//形参的值全部从实参得到 
f2(3.5, 3, 5);			//最后一个形参的值默认为'a' 
f2(3.5, 3);			//最后两个形参的值取默认值,b=0,d='c' 

我们在出传递参数的时候,实参与形参结合时,是第一个对应第一个,第二个对应第二个,。。。

所以我们指定有默认值的参数必须放在形参列表中的最右端,不然会出错误。

一.4,变量的引用

引用就是  给一个变量换个名字  所以又称为 别名

int a;
int &b = a;

此时  这个b并不是地址,不要理解为“把a的值赋值给b的地址”,对变量声名一个引用,并不是另开辟内存单元,b和a都代表同一个变量,使用同一个空间

#include<iostream>
using namespace std;

int main(){
	int a;
	int &b = a;        //声名 b 是 a 的 引用
	a = 5;             // a 值发生变化,b 的值也发生变化
	a = a*a;
	b = b/5;           // b 值发生变化,a 的值也发生变化
	cout << "a = " << a << endl; 
	cout << "b = " << b << endl;
} 

初始化后不能再被重新声名为另一个变量的别名

int a = 3, b = 4;    //定义a b是整型变量
int &c = a;          //声明c是a的别名
c = &b;              //企图是c改变为整型变量b 的别名  错误
int &c = b;          //企图重新声明c为整型b的别名  错误

一.5 , 内联函数

关键字  inline   这个关键字加到函数的前面

由于函数频繁调用会累计时间会边长

在函数名字前加上inline就相当与把这个函数放到了主函数内

#include<iostream>
using namespace std;
inline int max(int a, int b, int c)
{
	if(b > a)
	a = b;
	if(c > a)
	a = c;
	return a;
}
int main ()
{
	int a = 3, b = 7, c = 10;
	int m = max(a,b,c);
	cout << " max = " << m << endl;
} 

一.6,作用域运算符

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

c++ 提供作用域运算符 " :: "  不能用 " :: " 访问局部变量

#include<iostream>
using namespace std;
int a = 13.5;
int main ()
{
	int a = 3;
	cout << "局部变量a = " << a << endl; 
	cout << "全局变量a = " << ::a << endl;
} 

一 . 7,动态分配及撤销内存

c语言中用的 malloc申请内存,free 释放

c++ 中用 new申请  用delete释放

例子

	new int;					//开辟一个存放整数的空间 返回一个指向 整型数据的指针 
	new int(100);				//开辟一个存放整型的空间,并指定该整数的初值为 100 
	new int[100];				//开辟一个存放整型的数组,大小为100 返回一个指向整型数据的指针 
		
	new char[10];				//开辟一个存放char型的数组,大小为10 返回一个指向字符数据的指针 
	new int[4][5];				//开辟一个存放二维整型的数组空间,大小为 4*5 
	double *p = new double(3.145); //开辟一个存放实数的空间,并制定该实数的初值为3.145,将返回的指向实型数据的指针符给指针变量p 

new  运算符的一般形式

new 类型[初值];

用new分配数组空间时不能指定初值。

delete运算符使用的一般格式为

delete[ ]指针变量

double *p = new double(3.145);
delete p; 


//二维
int **a = new int*[5];
for(int i = 0; i <= 5; i++)
	a[i] = new int [5];
for(int i = 0; i <= 5; i++)
	delete []a[i];
delete []a;

猜你喜欢

转载自blog.csdn.net/Harington/article/details/84145888