C++入门:作用域、存储类与函数特性

需积分: 10 1 下载量 94 浏览量 更新于2024-08-19 收藏 2.77MB PPT 举报
"作用域和存储类-C++入门课件" C++编程语言中的作用域和存储类是理解代码组织和内存管理的关键概念。作用域决定了变量和标识符的有效范围,而存储类则影响变量的生命周期和可见性。 首先,让我们深入探讨作用域: 1. **块作用域**:在花括号`{}`内的任何地方定义的变量具有块作用域,这些变量只在定义它们的代码块内有效。一旦超出这个块,变量就无法访问。 2. **文件作用域**:在任何函数外部定义的变量具有文件作用域,这意味着它们在整个源文件中都是可见的,除非被其他作用域覆盖。 3. **函数原型作用域**:在函数原型中声明的参数具有函数原型作用域,它们仅在函数原型中存在,不影响函数定义。 4. **函数作用域**:在函数内部定义的变量具有函数作用域,它们只在该函数内部有效。 5. **类作用域**:在类定义中声明的成员变量和成员函数具有类作用域,它们在整个类内都可访问,并可以通过对象实例进行操作。 接下来,我们讨论具有缺省参数值的函数: C++允许在函数定义时为参数提供缺省值,使得在调用函数时可以省略某些参数。如示例所示,`int fac(int n=2)` 函数中,如果没有提供参数,它会默认使用2。当在`main()`函数中调用`fac(6)`和`fac()`时,我们可以看到缺省参数值的使用。 但是,使用缺省参数值有几点需要注意: 1. **缺省参数不可靠左设置**:意味着如果一个函数有多个参数,从右向左可以设定缺省值,但不能从左向右。 2. **函数原型可不写参数名**:在函数原型中,可以只指定参数类型和缺省值,不需写参数名,如`float v(float, float=10, float=20)`。 3. **缺省值只能在定义时指定一次**:函数原型中设定了缺省值后,在函数定义时不应再次设定。 最后,我们来看函数的重载: **函数重载(Overloading)**是C++的一个重要特性,允许在同一个作用域内使用相同的函数名但有不同的参数列表。这使得根据传入的参数类型或数量来选择合适的函数成为可能。在`fun`的例子中,`int fun(int a, int b)`和`int fun(int a)`就是重载函数。重载的关键在于: 1. **不同的参数列表**:重载函数必须通过参数个数、参数类型或两者来区别。例如,`int fun(int a, int b)`和`int fun(int a)`。 2. **返回类型不决定重载**:仅返回类型不同而参数列表相同的两个函数不是重载函数,因为编译器是根据参数来决定调用哪个函数的。 请注意,例子中`float fun(int a, int b)`和`int fun(int a, int b)`的返回类型不同,但这是无效的重载,因为编译器无法根据返回类型来区分这两个函数。因此,正确使用重载可以提高代码的可读性和效率。 了解并熟练掌握作用域、存储类、缺省参数和函数重载这些概念,对编写高效、清晰的C++代码至关重要。