c++自定义函数

对于小型应用程序来说不设计自定义函数完全可行,但随着程序越来越大,越来越复杂,实现的功能越来越多,如果不使用函数,main函数将变的越来越复杂越来越雍肿越来越令人难懂,而在更改程序的每一个功能的时候,往往要对整个main函数继续修改,所以在程序设计中,函数的设计与调用是很重要的一个部分。

例1:计算一个正方形的面积

#include<iostream>
using namespace std;int area(int x)
{return x*x;
} int main(){int a;cin>>a;cout<<"面积为"<<area(a);return 0;}

1)在4~7行声明且实现了函数area

2)在14行调用了函数area得到正方形的面积

一.函数的基本原型

通过例1中函数area我们可以知道函数原型的组成部分如下

1)返回值类型可以是c++基本数据类型,也可以是类,函数返回值类型必须与函数返回值匹配。

2)函数参数可以为空,可以不为空,为空时在调用该函数时,不输入认真参数;不为空时,函数参数可以有一个或者多个,这取决于你的寻求。

int test1()
{int a;return a;  //编译正确 
}int test2()
{double b;return b; //报错 
}int test3(int a,int b)//多个函数参数 
{return a+b;
}

二.函数的实现是什么

例2

//质数判断
bool isprime(int x){   //如果x为小于2得数 则肯定不为质数 if (x < 2 ||( x & 1 == 0)){return 0;}for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) {return 0;}}return 1;
}

在例2中

bool isprime(int x)  为函数的声明。

为函数的实现。

三.函数调用和实参形参是什么

例3

//设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
//求N的值#include<iostream>
using namespace std;int rve(int num)
{int sum = 0;while (num != 0){sum = sum*10 + num % 10;num = num / 10;}return sum;
}int main()
{for (int i = 1000; i < 10000; i++){int v_num = rve(i);if (v_num == i * 9){cout << i << endl;}}return 0;
}

1)函数调用:在23行的int v_num = rve(i)实现了对rve函数的调用,值i被传入rve函数,返回值i的

 倒序数。

2)函数的实参形参,在23行的int v_num = rve(i)中,i就是函数的实参,而num就形参,他们的值相同都互不影响,如果在函数rve中修改num的值,是不会对main函数i的值产生影响,除非使用引用的方法传递参数。

//#include<iostream>
//#include<string>
//using namespace std;
//
//int get_letter(string let)
//{	
//	int sum = 0;
//	string letter[9] = { "one","two","three","four","five","six","seven","eight","nine" };
//	int n[9] = { 3,3,5,4,4,3,5,5,4 };
//	for (int i = 0; i < 9; i++)
//	{
//		int ret = 0;
//		char p[5];
//		letter[i].copy(p, 5, n[i]);
//		*(p + 5) = '\0';
//		for (int j = 0; j < 5; j++)
//		{
//			if (p[j]==NULL)
//			{
//				break;
//			}
//			else
//			{
//				ret++;
//				if (p[j] == let[j])
//				{
//					sum++;
//				}
//			}
//		}
//		if (sum >= ret)
//		{
//			return i;
//		}
//		
//	}
//}
//
//int main()
//{	
//	string letter[9]= { "one","two","three","four","five","six","seven","eight","nine" };
//	int total;
//	cin >> total;
//	while (total != 0)
//	{
//		string one_letter;
//		cin >> one_letter;
//		
//		int num=get_letter(one_letter);
//		cout << letter[num] << endl;
//		total--;
//	}
//
//	return 0;
//}#include<iostream>
using namespace std;//编写一个不返回返回值的函数
void test(int num)
{cout << "num=" << num << endl;num = 2;//修改num的值cout << "num=" << num << endl;
}int main()
{int i = 1;cout << "i=" << i << endl;test(i);//在函数test中传入icout << "i=" << i << endl;//观察i的值在num的值被修改后是否发生变化
}

输出:

i=1
num=1
num=2
i=1

引入传入

#include<iostream>
using namespace std;//编写一个不返回返回值的函数
void test(int &num)// 即int &num=i
{cout << "num=" << num << endl;num = 2;//修改num的值cout << "num=" << num << endl;
}int main()
{int i = 1;cout << "i=" << i << endl;test(i);//在函数test中传入icout << "i=" << i << endl;//观察i的值在num的值被修改后是否发生变化
}

输出:

i=1
num=1
num=2
i=2       //i的值因为num的修改而发生变化,可以说明在引用传递中,num和i是绑定在一起的;

            //可以这样理解例如一个他真名叫吴衍林 他小名叫五五,所以五五和吴衍林代表着同一个人,这里的num和i的关系就可以理解为大名和小名的关系,即代表着同一个东西,只是名字的不同。

四.函数的重载

函数类型相同  函数名相同  函数列表不同

#include<iostream>
using namespace std;//编写一个不返回返回值  参数列表为空的函数
void test()
{cout << "一个不返回返回值  参数列表为空的函数" << endl;
}//函数的重载
void test(int a)
{cout << "函数的重载" << endl;cout << a << endl;
}int main()
{test();test(1);
}

输出

一个不返回返回值  参数列表为空的函数
函数的重载
1

ps:以上是我对函数的理解,可能有一些不完美不全面甚至错误的地方,希望谅解,如果可以的话指出的错误,感谢您阅读我这篇文章。

本文链接:https://my.lmcjl.com/post/2615.html

展开阅读全文

4 评论

留下您的评论.