学习没有捷径,但考试有捷径
临近考试,虽然之前对一些概念搞清楚了,但时日一长,很多又模糊了。因此利用整理成章,将知识重拾。
考试的范围如下:
- 常量(const、符号、字符串常量、立即数)
- 引用和指针
- 类的封装和隐藏(静态成员、友元函数)
- 类的初始化(初始化方式和顺序)
- 类的继承(继承方式、构函列表、多继承)
- 类的多态性(函数重载、运算符重载、虚函数、虚函数表)
- 类的作用域概念
引用
int i =10;
int& j = i;
在程序中处理i 和j 等价,分配常量指针&j指向i的地址。
new和delete
int a = 3, *p;
if ((p = new int) == NULL)
exit(1);
else
*p = 3;
cout << "*p is" << *p << endl;
delete p;
cout << "p site " << p << endl;
p = NULL;
cout << "p site " << p << endl;
delete后,虽不可访问,但地址不为空,防止下次判定失效,delete后赋空。
- 避免内存泄漏,防止产生别名。即不要将指针指向另外的地址。
- 优越性:自动调用构造和析构函数,自动计算大小
int *a=new int[10];
delete [] a;
知识点
- 增量运算符++和–可以用于浮点数
- 浮点数不可使用 %、位操作符
函数
引用
int& change(int &a)
{
return a;
}
int main(void)
{
int m = 3;
change(m)=8;
return m;
}
- 参数使用引用,直接写原变量名称即可改变值
- 返回引用值可修改返回值对应的量
函数设置默认值
int price(int num,int price=30)
{
return num*price;
}
内联函数
inline add(int a,int b)
{
return a+b;
}
- 不可包括循环语句和开关语句(switch,case)
- 预先定义好,代码量少(以空间换时间)
- 不可递归
- 代替#define ,防止未检查的隐患
习题
-
下列运算是否非法?
int m = 5;
float n = 5.5;
cout<<-- -m+n;
增量运算符–优先级高于单目运算符-,故先与m结合,格式变为
cout<<- --m+n;
而m为不可修改的左值,不可进行增量运算,故非法,但下列正确
cout<<--m+n;
-
函数返回值的类型就是返回值表达式的类型 (x)
int example()
{
char a = 'a';
return a;
}
隐式类型转换