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中传入i
	cout << "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中传入i
	cout << "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:以上是我对函数的理解,可能有一些不完美不全面甚至错误的地方,希望谅解,如果可以的话指出的错误,感谢您阅读我这篇文章。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值