数据类型与基本运算
字符串常量按字符书写顺序依次存储在内存中,并在最后存放空字符’\0’表示字符串常量的结束。ASCII字符在内存中占1个字节,而中文字符占2个字节
有名常量是指用关键字
const
修饰的变量。由于该变量只能读取,而不能被修改,所以 也称为常变量。有名常量必须在定义时进行初始化,之后不再允许赋值。例如:
const double PI=3.1415926;
const int Max=1000;
有名常量与变量一样,存储在程序的数据区中,可以按地址进行访问。变量在初始化之后还可以对其进行修改,但对有名常量的任何修改都会引发编译器报错。
使用有名常量的好处在于:
- 增加程序的可读性——用具有实际含义的标识符代替具体的数值,程序的可读性大大增强;
便于程序的维护——假设程序中多处用到圆周率,如果需要提高它的精度,则只需在有名常量的定义处修改即可。对于大型软件,程序的可读性和可维护性是两个极其重要的评价指标。
位运算的操作数只能是
bool
、char
、short
或int
类型数值,不能是float
和double
实型数。支持的运算有按位取反(~
)、左移(<<
)、 右移(>>
)、按位与(&
)、按位或(|
)和按位异或(^
)。有符号数时,向左移动n位,丢弃左边n位数据,并在右边填充0,同时把最高位作为符号位;向右移动n位,丢弃右边n位数据,而左边正数补0,负数补1。不能用变量来定义数组大小
指针变量与整数相加或相减的结果是指针前移或后移若干个单元,单元大小为
sizeof(type)
在输入输出语句中插入
hex
(十六进制)、oct
(八进制)和dec
(十进制)指明输入输出数据认定的格式。例如:
//以十六进制输入数据
//若输入f 11,则x和y的值分别为15和17
cin>>hex>>x>>y;
//hex为十六进制格式控制符,输出100
//设置过hex后,整数均以十六进制格式输出,除非用oct或dec重新设置
cout<<hex<<256<<endl;
- 对于字符数组,不能用等号运算符对其赋值。
strcpy(参数1,参数2)
是系统提供的函数,其功能是将参数2的内容复制到参数1所指定的字符数组中。例如:
//初始化的时候可以直接赋值
char str[20] = "";
strcpy(str, "星期日");
基本控制结构和函数
跳转语句
break
:在循环语句中,break
语句的作用是终止循环,流程跳转至循环语句之后。需要注意的是,对于循环嵌套语句,如果break
语句是在内循环中,则其只能终止其所在的循环语句的执行,流程跳转至外循环。continue
:其功能是将流程跳转至当前循环语句的条件表达式处,判断是否继续进行循环。
continue
语句与break
语句的区别是:continue
语句是终止本轮循环,而break
语句是终止本层循环。此外,continue
语句只能用在循环语句中。
^
表示按位异或C++容许在函数定义时为形参指定默认值。默认值的指定遵守“从右到左连续定义”的规则。例如:
double max(double a, double b=0, double c=0);
某些情况下,我们需要修改实参的值,而某些情况下,我们不想修改实参的值:
- 在C语言中:如果不想修改我们就直接传递实参,如果对象太大我们就传递指针,并且声明指针是指向const对象的;如果想修改实参的值,我们只能传递实参的指针,然而此时指针就不能用const修饰了。
- 在C++中,我们仍然可以使用C中的方式,然而也可以使用“引用”方式:如果不想修改实参的值,我们使用const引用(就是“常量引用”)方式,这样就不可以通过引用修改被引用对象的值;如果想修改实参的值,则使用平常性的引用实参就可以了。
内联函数:通常
inline
限定符只用于那些非常小并且被频繁使用的函数。例如:
inline bool isNumber(char ch) {
return ch>=’0’ && ch<=’9’?true:false;
}
类与对象
- 类与对象
C++编译器在生成程序时是将反映对象特征的数据成员分开,独立保存于程序的数据存储区域,而在程序的代码区仅保存一份成员函数。也就是说,物理上对象的数据成员和成员函数是分离的,并且成员函数是分享的。
程序在生成过程中,在类的成员函数形参表的最前端,编译器为其添加一个指向对象的指针,并命名该形参名为this
,称为this
指针。当通过对象调用成员函数时,系统将对象的地址传递给所调用成员函数的this
指针,从而实现对象与成员函数的正确绑定。
类的对象在逻辑上是相互独立的。在物理上,对象的数据是独立的,不同的对象拥有不同的数据,但是,类的成员函数却只有一份,为类的所有对象共有。
如果有参的构造函数的所有形参都指定了默认值,那