<C++程序设计>内存,结构体,内联函数,Strin
八进制 前缀0 ,020在计算机中是表示16的整数
浮点型1.0占8个字节
字符串占的字节数 = 字符串长度+1
“程序设计”长度为8(4个汉字占8个字节),占9个字节
^ 按位异或,不同为1相同为0
同名变量,局部变量的优先级要高于全局变量,如果想使用全局变量而不是局部变量,应在变量名之前加上作用域符号"::"
面向对象:采用对象来描述内部属性和操作方法,将数据和函数当做一个整体
继承:在...的基础上,又有什么样的新特征
destructor往往用于释放constructor中动态申请的内存空间
异或^,两个操作数不同为1,相同为0,将int型变量n的低8位取反,其余位保持不变 n^=0xFF
对于有符号数,如long,char,int,short,char型变量 右移时符号位(最高位)将一起移动,正数的符号位为0,负数的符号位为1,如果原符号位为0,右移时高位就补充0,原符号位为1右移时高位就补充1
实际上,右移n位,就相当于左操作数除以2的n次方,并且结果往小的取整(这是规律,不是规定)
转义字符
\n 换行符 \r 表示回车 \b 退格 \t制表符 ' 单引号 ''双引号 \0结束符 \f 分页符
C++程序运行时使用的内存区域
堆区 存放动态分配的数据
栈区 存放局部数据,局部变量
全局数据区 存放全局数据和静态数据,全局变量
程序代码区 存放程序各个函数的代码
存储类型 auto,register,static,extern 一个变量完整的形式<存储类型> <数据类型> <变量名>
auto:在定义块的开始分配空间,执行结束时释放空间
register:尽可能存放在CPU的寄存器中,提高程序的效率,仅局部变量和形式参数,才可作为寄存器变量
extern:如果在一个源文件a.cpp中定义的全局变量,想在b.cpp中使用,则应该在b.cpp中加上extern进行声明,表示该全局变量不在b.cpp中定义的
a.cpp
int Dimension = 100;
b.cpp
extern int Dimension;
如果在全局变量前加上static,则成为静态成员变量,只能在本文件中使用
函数的自动变量(auto)是在函数执行中才分配,static变量是在编译时才分配的内存
结构体
结构体类型 *指针变量名;
(*指针变量).变量名
指针变量->变量名
结构体只有数据成员,没有函数成员
内联函数
内联函数:在类体内直接定义函数成员,该成员函数成为内联函数
内联成员函数 : inline + 成员函数,整个函数体出现在类定义的内部
//内联函数形如: class clock{ void show_time(){cout<<Hour:<<":"minute<<endl;} } inline int square(int x){ return x*x; } //编译时遇到内联函数调用square(i),就用函数体中的代码代替square(i) class clock{ void show_time(){cout<<Hour:<<":"minute<<endl;} }
String的相关操作
char *strcat(char *destin,char * source) //链接两个字符
char *strcpy(char * destin,char *source) //将字符串source拷贝到destin中
String text =“heavy rains are pushing water”;
k = text.find("heavy"); //查找heavy的下标
text.earse(k,sizeof("heavy")-1); //删除heavy
text.insert(k,"strong");
String S1("Hello");//一个参数的构造函数
String month ="march"; //字串赋值
String S2(8,"X");//两个参数的构造函数
String类不提供以字符和整数为参数的构造函数
String error ='C';//错误,不存在以字符为参数的构造函数
可以将字符赋值给String
String s;
s ='n';
逐个访问String类对象的字符,String S1("Hello");
for(int i=0;i<s1.length;i++)
cout<<s1.at(i)<<endl;
成员函数at会做范围检查,如果超出范围会抛出out_of_range异常,而下标运算符不会做检查
//用+运算符连接字符串
String S1("GOOD"),S2("MORNING");
S1+=S2;