C++ premier plus书之--C++函数基本概念

C++中要使用函数, 需要创建自己的函数时, 需要三个步骤:
1.提供函数的定义
2.提供函数的原型
3.调用函数

看一个简单的例子

// simple function
#include "iostream"
using namespace std;

// 函数原型
void simple();

int main() {
	
	cout << "main function will call the simple() : " << endl;
	simple();
	cout << "after called simple" << endl;
	return 0;
}

// 函数定义
void simple() 
{
	cout << "I am a simple function!" << endl;
}

程序运行结果为:

只需要注意三个步骤即可

关于返回值的问题:
c++返回值类型有一定的限制: 不能是数组, 但可以是其他任何类型:整数, 浮点数, 指针, 甚至可以是结构和对象(虽然c++不能直接返回数组, 但可以将数组作为结构或对象的组成部分返回).

函数通过将返回值复制到指定cpu寄存器或内存单元中来将返回值返回. 随后调用函数的程序将查看对应的内存单元. 函数原型将返回值类型告诉调用程序, 而函数定义命令被调用函数应返回什么类型的数据.

注意函数原型中可以提供变量名, 也可以不提供变量名例如:
double cube(double x);
void cheers(int);
还有一点需要注意, 原型中的变量名相当于占位符, 因此不必与函数定义中的变量名相同.

原型的功能:
1.编译器正确处理函数返回值
2.编译器检查使用的参数数目是否正确
3.编译器检查使用的参数类型是否正确, 如果不正确则会转换为正确的类型(如果可能的话)

例如有以下两个函数原型:

double cube(double x);
void cheers(int);


程序中有这么一行代码

cheers(cube(2));


这样写程序是能够正确处理上面这行代码的并不会报错(但是在java中这样做是会报错的), 其中涉及到两次类型转换: 1.cube接收double传递的是2, 因此2会被转换为2.0, 2.cheers接收一个int, 但是拿到的是8.0, 由于可以正常转换所以会被转化为8传递进去.

自动类型转换并不是可以避免所有错误, 例如8.12E27就不能转化为int值.当较大类型值转化为较小类型值时, 编译器会发出警告. 并且仅当有意义的时候原型化才会导致类型转换. 例如原型化不会将int转换为指针或者结构体.
在编译阶段进行的原型化称为静态类型检查


 

猜你喜欢

转载自blog.csdn.net/c1392851600/article/details/84501301