以下内容为大学期间学习C++语言总结的知识:
《C++》基础入门_01——数据存储,表示形式,基本运算
《C++》基础入门_02——面向对象的总体概括
《C++》基础入门_03——程序的开发过程
《C++》基础入门_04——四大语句
《C++》基础入门_05——函数详解篇
《C++》基础入门_06——面向对象的详述
《C++》基础入门_07——数据的共享保护:const
《C++》基础入门_08——利用数组实现对批量数据的处理
《C++》基础入门_09——指针和引用的讲解
《C++》基础入门_10——用户自定义数据类型详细篇
《C++》基础入门_11——友元的讲解
《C++》基础入门_12——类模板
《C++》基础入门_13——运算符的重载
《C++》基础入门_14——继承与派生
《C++》基础入门_15——多态性
《C++》基础入门_16——输入输出流详讲
《C++》基础入门_17——对象串行化
《C++》基础入门_18——异常处理
《C++》基础入门_19——命名空间
《C++》基础入门_20——文件操作
《C++》基础入门_21——在函数中返回数组的常用方法
概念——————————————————————————————————
- 数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。
- 数组属于构造类型。
- C++中数组没有长度变量(length)
一、一维数组
-
声明:
类型说明符 数组名[常量表达式];例如:
int a[10]; -
使用
- 先声明,后使用
- 只能逐个引用数组元素,而不能一次引用整个数组
a[0]=a[5]+a[7]+a[2*3];
-
一维数组的存储顺序
数组元素在内存中顺序存放, 它们的地址是连续的。
-
一维数组的初始化
- 在声明数组时对数组元素赋初值
int a[10]={0,1,2,3,4,5,6,7,8,9};
- 可以只给一部分元素赋初值,其余为默认值
int a[10]={0,1,2,3,4};
- 对全部数组元素赋初值时,可以不指定数组长度。
int a[]={0,1,2,3,4,5,6,7,8,9};
二、二维数组
-
二维数组的声明
数据类型 标识符[常量表达式1][ 常量表达式2]
int a[3][4];`
-
二维数组的存储
按行存放,上例中数组a的存储顺序为:
-
二维数组的初始化
若对所有元素都初始化,则数组第一维长度可以不指定,但是第二维必须指定
- 将所有数据写在一个{}内,按顺序赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
- 分行给二维数组赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8,},{9,10,11,12} };
- 对部分元素赋初值
int a[3][4]={{1},{0,8},{0,1,2}};
三、数组作为函数参数
- 数组元素作实参,与单个变量一样。
- 数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。
- 对形参数组的值进行改变会直接影响到实参数组。
- 用数组元素作为实参
将数组元素的值传给形参变量。 - 用数组名作为实参
若函数实参为数组名,形参应该也为数组名,也可以是指针变量,用于接收实参传递的地址。
数组名代表数组首元素的地址,并不代表数组所有元素
四、字符数组
用来存放字符数据的数组
一个元素存放一个字符
-
初始化:
与数组的初始化相同1. 单个赋值 char c[4]; c[0]='y'; c[1]=' '; c[2]='s'; c[3]='g'; 2. 用{}全部赋值 char c[4]={'y',' ' ,'s','g'}; 3. 赋值一部分,剩下的默认为空字符 '\0' char c[6]={'y',' ' ,'s','g'};
-
赋值与引用
- 只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值
char c[4];c[0]=‘y’;c[1]=’ ‘;c[2]=‘s’;c[3]=‘g’;//正确
char c[4]={‘y’,’ ’ ,‘s’,‘g’}; //错误,不可一次性赋值,只有初始化才可以 - 不可以将两个相同类型和长度的数组相互赋值
若存在两个相同类型和长度的数组a、b且b已经被初始化
a=b; //错误,a,b代表首元素地址,地址不可以被赋值
a[0]=b[0]; //正确
- 只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值
-
字符串和字符数组
一个字符数组可以存放字符串。但是可能长度会不一致。
系统会对字符串所有字符的最后面加一个’\0’,作为结束符标志。String s=“hello yj”; //长度8
char s2[]={‘h’,‘e’,‘l’,‘l’,‘o’,’ ',‘y’,‘j’};//长度9
系统会对字符串转换的字符数组最后自动填补空字符‘\0’;可以用字符串常量来初始化字符数组。
char s[]={“hello baby”};
或者 char s[]=“hello baby” ; -
字符数组的输入输出
-
逐个字符输出输入。
-
整个以字符串形式输出输入。
char a[20];
cin>>a;
cout<<a;//输出的字符不包括空字符 -
若字符组数长度大于字符串实际长度,输出遇到空字符结束。
char a[10]=“china”;
cout<<a;//只输出5个字符遇到‘\0’结束
-
五、字符串
5.1 字符串变量
-
定义
- 必须先把string类库加载进来。
#include <string> - 先定义后使用:
string 变量名;
- 必须先把string类库加载进来。
-
赋值:
- 可以直接把字符串常量赋值给字符串变量
string s=“china”;
- 用另一个字符串变量给字符串变量赋值;
string s=s1;
- 可以直接把字符串常量赋值给字符串变量
-
输入输出
直接在输入输出语句中用字符数变量名。cout<<s;
-
字符串变量的运算
-
复制直接用赋值号
string1=string2;
-
连接用加好
string s1=“c++”;
string s2=“is difficult”;
s1=s1+s2;//输出:c++is difficult -
比较直接用关系运算符
-
5.2 字符串数组
可以用string定义字符串数组。
- 字符串数组的每个元素都是一个不定长的字符串
- 字符数组中每个元素的值只包含本身的值,不含空字符。
5.3 使用字符串处理函数
加头文件 string或string.h
- 字符串连接函数 strcat
函数原型:strcat(char[],const char[])
;
作用:将第二个字符数组中的字符串连接在前面字符数组的字符串后面,连接后的字符串存放在第一个数组中并返回。 - 字符串复制函数strcpy
函数原型:strcpy(char[] ,const char[])
;
作用:把第二个数组中的字符串复制到第一个字符串数组中,第一个数组中内容被覆盖。- 第一个参数必须是数组名,第二个参数可以是字符串数组或者字符串常量。
- 可以将第二个参数中的若干个字符复制到第一个字符串数组中
strcpy(str,str2,3)//将str2中的前2个字符复制到str中,然后再加个'\0'。
- 字符串比较函数strcmp
函数原型:strcmp(const char[],const char[])
;
作用:比较两个字符串大小,从第一个字符开始比较,谁在字符表前面谁小。
==:函数值为0;
>: 返会正整数;
<: 函数值为一负数。 - 字符串长度函数strlen
函数原型:strlen (const char[])
;
作用: 返会字符串实际长度,不包括‘\0’.
六、对象数组
- 声明:
类名 数组名[元素个数]; - 访问方法:
通过下标访问 数组名[下标].成员名 - 初始化
-
数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象
-
通过初始化列表赋值。
例:Point A[2]={Point(1,2),Point(3,4)};
-
如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)
-
- 数组元素所属类的构造函数
- 不声明构造函数,则采用默认构造函数。
- 各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。
- 各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。
- 当数组中每一个对象被删除时,系统都要调用一次析构函数