函数与参数
计算一个整型表达式
int abc (int a, int b, int c)
{
return a + b * c;
}//a,b,c是函数abc的形参每一个形参都是整型的,调用abc:
int z = abc(2, x, y);
//z = abc(2, x, y).......那么在2,x, y便是分别与a.b.c对应的实参。?
/*
当调用 abc(2, x, y)是a被赋值2,b被赋值x, c被赋值y。对它们赋值之前进行类型转换,
egg:如果x是double类型其值为3.7,那么b被赋值为3。
*/
当函数运行结束时,形参类型的析构函数负责释放形式参数,当一个函数运行结束时,形参的值不会被赋值到对应的实参中。因此,函数调用不会修改与形参对应的实参的值。
模板函数?
利用模板函数计算一个表达式
template<class T>
T abc(T a, T b, T c)
{
return a + b * c;
}//这是一段通用代码,T可以是int,double,float ,long......等数据类型。
引用参数?
利用引用参数计算表达式
template<class T>
T abc(T &a, T &b, T &c)
{
return a + b * c;
}
//如果abc(x,y.z)调用,其中,a,b.c是x,y,z的别名与传值参数的情况不同。
常量引用参数?
利用常量引用计算一个表达式
template<class T>
T abc(const T &a, const T &b, const T &c)
{
return a + b * c;
}
//用关键字const来指明函数不可以修改引用参数。
返回值?
一个函数可以返回一个值,一个引用或一个常量引用。
#include <iostream>
using namespace std;
int& add(int i, int b);
int main()
{
int c = add(100000000, 1111111);
cout << c << endl;
return 0;
}
int&add(int i, int b)
{
b = i;
return b;
}
/*
100000000
F:\新建文件夹\myfirst\Debug\myfirst.exe (进程 16788)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*/
重载函数?
一个函数的签名是有这个函数的形参类型以及形参个数确定。
#include <iostream>
using namespace std;
int fun(int a);
int fun(int a, int b);
int main()
{
return 0;
}
int fun(int a)
{
return a;
}
int fun(int a, int b)
{
return a + b;
}
?动态处理空间的分配? ? ?
c++操作符new用来进行动态存储或运行时存储分配,它的值是一个指针,指向所分配的空间。
int* y;
y = new int;
*y = 10;
//合并为int *y=new int ;*y=10;
//或int *y=new int(10);或int*y;y=new int(10);
一维数组和二维数组?
//创建一维数组X其长度为n;
flaot* x = new float[n];//操作符new为n个浮点数分配了内存空间,并返回第一个浮点数空间的指针。
//可以用x[0],x[1]......x[n-1]的形式访问。
delete[]x;//c++中的delete用来释放new开辟的空间。
int* p = new int;
delete p;
对于二维数组,c++采用多种机制来说明二维数组,但编译时就要知道两位的大小。
创建一个二维数组
template <class T>
void make2dArray(T**& x, int numberofRows,int numberOfColumns)
{
x = new T * [nmberofRows];//创建行指针
for(int i = 0; i < numberofRows; i++)
{
x[i] = new T[numberOfColumns];//为每一行分配空间。
}
}
?释放二维数组
template <class T>
void make2dArray(T**& x, int numberofRows)
{
//删除行数组空间
for(int i = 0; i < numberofRows; i++)
{
delete[]x[i];
delete x;//删除行指针。
x = nullptr;
}
}
|