c++primer笔记
加入光荣的进化吧
第六章! 函数
- 局部对象
- 名字有作用域, 对象有生命周期。
- 名字的作用域是程序文本的一部分,名字在其中可见
- 对象的生命周期是程序执行过程中该对象存在的一段时间。
- 形参和函数体内部定义的变量统称为==局部变量==。
- 仅在函数的作用域内可见,同时局部变量还会==隐藏==在外层作用域中同名的其它所有声明!
- 名字有作用域, 对象有生命周期。
- 局部静态对象!
- 可以使局部变量的生命周期贯穿函数调用及之后的时间。
- 方法: 将局部变量定义成static类型。
static关键字和extern关键字
- static是C++ 中常用的修饰符,它被用来控制变量的存贮方式和可见性。
- extern “C”是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern “C”来说明。
- static关键字
- 修饰局部变量
- 一般情况下,局部变量存在栈区。并且局部变量的生命周期在该语句块执行结束时便结束了。 但如果用static修饰,该变量便存在静态数据区,其生命周期一直持续到整个程序执行结束。
- 虽然static修饰的局部变量 生命周期和存储空间发生了变化,但作用域并没有改变。仍然是一个局部变量!
- 修饰全局变量
- 对于全局变量,既可以在本源文件中被访问,也可以在同一个工程的其它源文件访问(要用extern声明)
- 但如果在本源文件中用static修饰,则在同一个工程的其它源文件中无法访问。static改变了全局变量的作用域范围。
- 修饰函数
- 情况与修饰全局变量基本一致,改变了函数的作用域!
- c++中
- 在C++中如果对类中的某个函数用static修饰,表示该函数属于一个类,而不属于此类的任何特定对象。
- 如果对类中某个变量进行static修饰,表示该变量为类及其所有的对象所有。他们在存储空间都只存在一个副本,可以通过类和对象去调用。
- extern关键字
- extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。”
- > 其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。
- static关键字
- ….
- 在头文件中声明,在源文件中定义。
头文件(.h)和源文件(.cpp)都应该写什么?:
头文件(.h)
- 写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。
在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):
#ifndef CIRCLE_H #define CIRCLE_H //你的代码写在这里 #endif
这样做是为了防止重复编译,不这样做就有可能出错。
至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行。原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对应。
- 源文件 (.cpp)
- 源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须#include一下实现的头文件,以及要用到的头文件。那么当你需要用到自己写的头文件中的类时,只需要#include进来就行了。
当源文件和头文件不在同一个目录下时,要在 项目-属性-c/c++-附加包含目录中编辑所在的目录。
参数传递:
- 当实参拷贝给形参时,他们之间还是独立的对象,此过程被称为值传递。
- 改变形参不能影响到实参的变化
- C++最好使用引用类型的形参代替指针!
- 传参数时直接传数值, 在函数声明中使用引用。能起到类似指针的效果。
- 如果函数无需改变引用形参的值,最好将其声明为常量引用。
- 当实参拷贝给形参时,他们之间还是独立的对象,此过程被称为值传递。