Cpp_learning_note_1

Posted on Dec 19, 2020

最近因为项目而学习C++

学习资源:西北工业大学 C++程序设计青岛大学 面向对象程序设计(C++和Java)

默认参数

C++允许在函数定义或声明时,为形参指定默认值,这样的参数称为默认参数。

(1)如果在函数定义时设置了默认参数,那么就不能在函数声明中再次设置,反之亦然。

(2)可以设置多个默认参数,设置的顺序自右向左,即要设置默认值的参数右边的所有参数都必须是默认参数。

int volume(int L, int W, int H = 1);
int volume(int L = 1, int W = 1, int H = 1);
//上面都是正确的
int volume(int L = 1, int W, int H);//错误
int volume(int L, int W = 1; int H);//错误

(3)默认值可以是常量、全局变量和函数调用(调用实参必须是常量或全局变量的表达式,不可以是局部变量)

函数重载

function overloading是在同一个域中用同一个函数名来定义多个函数,但是函数参数列表彼此不同(个数不同或参数类型不同)

  • 编译程序将根据实参和形参的类型和个数的最佳匹配来选择调用哪一个函数

数组作为函数的参数

如果实参使用数组名,本质上是将这个数组的首地址传递到形参中。数组实参a传递的是数组首地址,形参A定义为数组形式,此时A 的地址与a一样,本质上形参数组A就是实参数组a(内存中两个对象所处位置相同,则实际上它们是同一个对象)

和指针类似,指针传递的也是地址,这样做可以直接改变多个数组元素,而不用返回

数组参数的传递机制

  • 数组作为函数的参数,传递的是数组的地址(数组在内存中是一段区域内连续的)

(1)在被调函数中使用形参就是间接使用实参(与变量不同)

(2)函数调用时不会为形参数组分配存储空间,即形参数组的长度无实际作用,所以形参数组甚至可不给出长度

(3)函数如何知道数组的长度->函数调用时再给出一个参数来表示实参数组的长度

(4)多维数组作为函数的参数,形参数组除第一维任意,其他维的长度需要与实参数组相同

字符串

C++语言规定字符串是以’\0’字符作为结束符的字符数组,空字符表示字符串的结束位置

定义字符数组的长度至少为字符串长度加1(空字符占1位)

C++在编译时自动在字符串常量后增加一个空字符

//C++中兼容C语言的字符串处理函数的头文件string.h
strcpy(str1, str2);//copy
strncpy(str1, str2, n);//copy前n个
strcat(str1, str2);//连接
strncat(str1, str2, n);//连接前n个
strcmp(str1, str2);//比较字符串
strlen(str);//length
atof("123.456");
atoi("-456");//string转换成数值函数

字符串对象

采用类来实现字符串

#include <string>
char S1[20];
string str1;
char S2[20] = "Java";//C风格字符串初始化
string str2 = "Java";//string对象copy初始化
string str3("Java");//string对象直接初始化

string对象允许使用+和复合运算符+=实现连接,可以调用其他成员函数来实现字符串处理(与java中的method相同)