C/C++
二十一、 枚举类型
枚举定义的格式如下:
enum 枚举名{枚举元素1,枚举元素2,……};
没有指定值的枚举元素,第一个枚举成员的默认值为整型的0。对于以指定的值,后续枚举成员的值在前一成员上加1,以此类推。
*枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。
*枚举系统本身由系统定义了一个表示序号的数值,从开始顺序定义为0,1,2,3,4,…
*只能把枚举值赋予给枚举变量,不能把元素的数值直接赋予给枚举变量。
*如一定把数值赋予枚举变量,则必须用强制类型转换。
*还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。
*枚举中若一元素被赋值,则气候的元素值依次在原值上递加1.
二十二、 siezof函数
在Pascal语言中,sizeof()是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在C语言中,sizeof()是一个判断数据类型或者表达式长度的运算符。
一般的,在32位编译环境中,sizeof(int)的取值为4。
在32位计算机中,一个指针变量的返回值通常是4(注意结果是以字节为单位),在64位系统中指针变量的sizeof通常为8。
下面的c3,c4值应该是多少呢
1 2 3 4 5 6 7 8 |
void foo3(char a3[3]) { int c3=sizeof(a3);//c3== } void foo4(char a4[]) { int c4=sizeof(a4);//c4== } |
也许当你试图回答c4的值时已经意识到c3答错了,是的,c3!=3。这里函数参数a3已不再是数组类型,而是蜕变成指针,相当于char* a3,为什么仔细想想就不难明白,我们调用函数foo3时,程序会在栈上分配一个大小为3的数组吗不会!数组是“传址”的,调用者只需将实参的地址传递过去,所以a3自然为指针类型(char*),c3的值也就为4。
sizeof:返回这个数组所有元素所占的空间,包括“\0”;
strlen:不区分指针还是数组,返回其长度,不包括“\0”
不允许指针相加,两个地址相加无意义也可能越界,所以规定不允许指针相加。
二十三、 C++是面向对象的编程
特征为:封装性;继承性;多态性。
C语言是面向过程的编程。
面向对象的基本原则是:
1、 单一职责原则;
2、 开放封闭原则;
3、 里氏替换原则;
4、 依赖倒置原则;
5、 接口隔离原则。
二十四、 vector函数
Vector类 是在 java 中可以实现自动增长的对象数组,vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector初始化方式:
1、 vector<int>v(10);表示size为10的vector,每个元素执行默认初始化;
2、 vector<int>v(10,1);表示创建size为10的vector,每个元素初始化为1;
3、 vector<int>v{1,2,3,4};表示创建size为4的vector,元素的值分别为1,2,3,4.
4、 vector<int>v;表示创建size为0的vector。
例:对于string=”hello”;初始化
vector<string>s({“hello”}) //大括号表示这是一个一维数组,第一个元素为“hello“。
vector<string>s(1,”hello”); //结果同上,表示数组中只有一个“hello”
vector<vector<string>>s({{“hello”}}); //两个大括号表示这是一个二维数组,其中第一行第一列的元素为“hello”。
vector<vector<string>>s(1,{“hello”}); //结果同上,表示数组中第一个元素为{“hello”}。
二十五、 构造函数被调用的三种情况
1、 定义一个对象时,以本类另一个对象作为初始值,发生复制构造;
2、 如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;
3、 如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主调函数,此时发生复制构造。