定义一个函数
using namespace std;
int sum(int num1,int num2){ num1 = num1 + 1; return num1 + num2; }
int main() { int num1 = 12; cout << sum(num1, 13) << endl; cout << num1 << endl;
return 0;
}
> 26> 12<a name="sSXbL"></a>### 函数的声明一般来说,函数在调用之前必须已经被声明,比如以下代码无法正常运行,主要就是sum这个方面没有在main方法执行之前被声明。```cpp#include <iostream>using namespace std;int main(){cout << sum(1, 2) << endl;return 0;}int sum(int num1,int num2){return num1 + num2;}
error: ‘sum’ was not declared in this scope
方案一:
#include <iostream>using namespace std;//将要调用的方法移动到main方法之前int sum(int num1,int num2){return num1 + num2;}int main(){cout << sum(1, 2) << endl;return 0;}
方案二:
#include <iostream>using namespace std;int sum(int num1, int num2);//先向编译器声明该方法int main(){cout << sum(1, 2) << endl;return 0;}int sum(int num1,int num2){return num1 + num2;}
头文件
当项目的规模变大以后,我们就开始考虑解耦,比如上边的sum方法我们将他独立出去,这时候就用到了头文件,即以.h为后缀名的文件
int sum(int num1, int num2);
注:头文件中仅声明方法,但并不定义(当然也可以直接在这里定义,舍弃sum.cpp)- sum.cpp```cpp# include "sum.h"int sum(int num1,int num2){return num1 + num2;}
using namespace std;
int main() { cout << sum(1, 2) << endl; return 0; }
注:在VSCode中,编译器可能无法将sum.h和sum.cpp关联起来,我们也可以把main文件里的sum.h修改为sum.cpp就可以正常运行了。<a name="BGKQQ"></a>###<a name="CtF8T"></a>### 指针传递、值传递,引用传递<a name="ReGeK"></a>#### 值传递```c#include <iostream>using namespace std;int sum(int num1,int num2){return num1 + num2;}int main(){cout << sum(1, 2) << endl;return 0;}
值传递的作用在于拷贝一份变量然后传给函数,在函数中进行修改并不会对实参造成影响,但拷贝本身不如指针/引用传递高效,一般C++推荐用常量引用替代值传递,一般方面调用语法不如指针复杂,效率和指针一样高:
常量引用替代值传递
#include <iostream>using namespace std;int sum(const int& num1,const int& num2){return num1 + num2;}int main(){cout << sum(1, 2) << endl;return 0;}
指针传递
#include <iostream>using namespace std;void add(int* num1){*num1 = *num1+1;return;}int main(){int num = 20;add(&num);cout << num << endl;return 0;}
引用替代指针传递
#include <iostream>using namespace std;void add(int& num1){num1++;return;}int main(){int num = 20;add(num);cout << num << endl;return 0;}
注:可以看到语法相对简单了很多,不用重复做取值/取地址的操作
常函数
在函数上加上const关键字,可以将该函数设置为常函数,常函数的特点是该函数内不能修改除了mutable以外的任何变量。
#include <iostream>#include <string>using namespace std;class People{private:mutable int age;string name;public:People(string name,int age){this->age = age;//this是一个指针,代表当前的对象}/*** println()函数加上const,所以是常函数,不能修改非mutable的参数,否则编译器会报错**/void println() const{age = 30;//age加上了mutable属性所以可以修改,但如果想改name,会无法编译cout <<"姓名:" <<name<< "年龄:" << age << endl;}};int main(){People p("小明", 20);p.println();return 0;}
