C++函数使用全解析
立即解锁
发布时间: 2025-08-19 01:36:28 阅读量: 1 订阅数: 6 


C++面向对象编程入门与实践
### C++函数使用全解析
#### 1. 函数概述
函数是将一系列程序语句组合成一个单元,并赋予其一个名称的代码块。这个单元可以在程序的其他部分被调用。使用函数主要有两个重要原因:
- **辅助程序的概念组织**:将程序划分为函数是结构化编程的主要原则之一,虽然面向对象编程提供了更强大的程序组织方式,但函数在结构化编程中仍起着关键作用。
- **减小程序大小**:如果一段指令序列在程序中多次出现,就可以将其封装成一个函数。函数的代码在内存中只存储一次,即使在程序执行过程中该函数会被多次调用。
#### 2. 简单函数示例
以下是一个简单的函数示例,该函数的作用是打印一行45个星号,用于使生成的表格更易读。
```cpp
// table.cpp
// demonstrates simple function
#include <iostream>
using namespace std;
void starline(); //function declaration
// (prototype)
int main()
{
starline(); //call to function
cout << "Data type Range" << endl;
starline(); //call to function
cout << "char -128 to 127" << endl
<< "short -32,768 to 32,767" << endl
<< "int System dependent" << endl
<< "long -2,147,483,648 to 2,147,483,647" << endl;
starline(); //call to function
return 0;
}
//--------------------------------------------------------------
// starline()
// function definition
void starline() //function declarator
{
for(int j=0; j<45; j++) //function body
cout << '*';
cout << endl;
}
```
程序输出如下:
```plaintext
*********************************************
Data type Range
*********************************************
char -128 to 127
short -32,768 to 32,767
int System dependent
long -2,147,483,648 to 2,147,483,647
*********************************************
```
这个程序包含两个函数:`main()` 和 `starline()`。要在程序中添加一个函数,需要以下三个组件:
- **函数声明**
- **函数调用**
- **函数定义
#### 3. 函数声明
在使用函数之前,必须告知编译器该函数的存在,有两种方式可以实现:
- **在调用前声明函数**:在 `TABLE` 程序中,`starline()` 函数的声明如下:
```cpp
void starline();
```
声明中的 `void` 关键字表示该函数没有返回值,空括号表示该函数不接受任何参数。函数声明以分号结尾,它本身是一个完整的语句。函数声明也被称为原型,它为函数提供了一个模型或蓝图,告诉编译器在程序的后续部分会有这样一个函数。声明中的信息(返回类型、参数数量和类型)有时也被称为函数签名。
- **在调用前定义函数**:这种方式将在后面详细介绍。
#### 4. 函数调用
在 `main()` 函数中,`starline()` 函数被调用了三次,每次调用的形式如下:
```cpp
starline();
```
调用函数只需要函数名后跟括号,调用的语法与声明类似,但不使用返回类型。调用语句以分号结尾,执行调用语句会使函数被执行,控制会转移到函数定义处,执行完函数体内的语句后,控制会返回到调用函数的下一条语句。
#### 5. 函数定义
函数定义包含函数的实际代码,`starline()` 函数的定义如下:
```cpp
void starline() //declarator
{
for(int j=0; j<45; j++) //function body
cout << '*';
cout << endl;
}
```
函数定义由声明符和函数体组成。声明符必须与声明一致,包括函数名、参数类型和返回类型。声明符不以分号结尾。当函数被调用时,控制会转移到函数体的第一条语句,执行完函数体的所有语句后,遇到右花括号,控制会返回到调用程序。
函数的各个组件总结如下表:
| 组件 | 目的 | 示例 |
| ---- | ---- | ---- |
| 声明(原型) | 指定函数名、参数类型和返回值,提醒编译器和程序员后续会有该函数 | `void func();` |
| 调用 | 使函数被执行 | `func();` |
| 定义 | 函数本身,包含构成函数的代码行 | `void func() { // lines of code }` |
| 声明符 | 定义的第一行 | `void func()` |
#### 6. 与库函数的比较
在程序中,我们经常会调用库函数,例如 `ch = getche();`。库函数的声明通常在程序开头指定的头文件中(如 `CONIO.H` 对于 `getche()` 函数),而定义(编译成可执行代码)则在库文件中,在构建程序时会自动链接到程序中。使用库函数时,我们不需要编写声明和定义,但编写自己的函数时,声明和定义是源文件的一部分。
#### 7. 消除声明的方法
另一种将函数插入程序的方法是消除函数声明,将函数定义放在第一次调用该函数之前。例如,将 `TABLE` 程序重写为 `TABLE2`:
```cpp
// table2.cpp
// demonstrates function definition preceding function calls
#include <iostream>
using namespace std; //no function declaration
//--------------------------------------------------------------
// starline() //function definition
void starline()
{
for(int j=0; j<45; j++)
cout << '*';
cout << endl;
}
//--------------------------------------------------------------
int main() //main() follows function
{
starline(); //call to function
cout << "Data type Range" << endl;
starline(); //call to function
cout << "char -128 to 127" << endl
<< "short -32,768 to 32,767" << endl
<< "int System dependent" << endl
<< "long -2,147,483,648 to 2,147,483,647" << endl;
starline(); //call to function
return 0;
}
```
这种方法对于短程序来说更简单,因为它消除了声明,但灵活性较差。当程序中有多个函数时,程序员需要仔细安排函数的顺序,以确保每个函数在被调用之前已经定义,有时这是不可能实现的。而且,很多程序员更喜欢将 `main()` 函数放在列表的开头,因为程序执行从这里开始。一般来说,我们会坚持使用先声明的方法,从 `main()` 函数开始编写程序。
#### 8. 向函数传
0
0
复制全文
相关推荐










