第二课——引用
int n = 100;
const int &r = n;
r = 200; //编译错
n = 300; //没问题
不能通过常引用去修改其引用的内容
第三课——const关键字
- 定义常量指针
- 不能通过常量指针修改其指向的内容
int n, m;
const int *p = &n;
*p = 5; //编译错
n = 4; //OK
p = &m; //OK,常量指针可以指向其他内容(指针常量不可)
- 不能把常量指针赋值给一般指针
const int * p1;
int * p2;
p1 = p2; //OK
p2 = p1; //error
p2=(int *) p1; //OK,强制类型转换
- tips: 函数参数为常量指针时,可以避免函数内部不小心改变参数指针所指向的内容
void MyPrintf(const char * p)
{
strcpy( p, "this"); //编译错
printf("%s", p); //OK
}
第三课——动态内存分配
new、delete
int * p = new int;
* p = 5;
delete p;
delete p; //异常
int * p = new int[20]; //动态分配数组
p[0] = 1;
delete []p; //释放数组要加[]
第三课——函数重载
多个函数名字相同,返回值相同,参数列表类型不相同、或参数个数不同。
注意:参数列表相同、函数名相同,仅返回值不同,为函数定义,不是重载。
第三课——函数缺省参数
C++中定义函数时可以让最右边的连续若干个参数有缺省值,调用时若相应位置不写参数,参数默认为缺省值。
目的:提高函数的可扩充性;若某个写好的饿函数需要添加新的参数,而原先调用函数的语句未必需要使用新增的参数,则可以避免对原来调用函数语句的修改。
第四课——面向对象程序设计方法
对象的内存分配
访问类的成员函数和成员变量
- 对象名.成员名
CRectangle r1, r2;
r1.width = 5;
r2.Init(3, 4);
- 指针->成员名
CRectangle r1, r2;
CRectangle * p1 = & r1;
CRectangle * p2 = & r2;
p1 -> width =5;
p2 -> Init(3, 4);
- 引用名.成员名
CRectangle r2;
CRectangle & rr = r2;
rr.width = 5;
rr.Init(3, 4); //r2的值变化
类成员的可访问范围
类中,缺省为私有成员;结构体中缺省为共有