11.5 小结
C++的指针和C中的指针是几乎相等的,这是非常好的。否则,许多C代码在C++中将不会被正确地编译。仅在出现危险赋值的地方,编译器才会产生出错信息。假设确实想这样赋值,编译器的出错可以用简单的(和显式的!)类型转换清除。
C++还从Algol和Pascal中引进引用(reference)的概念,引用就像一个能自动被编译器间接引用的常量指针一样。引用占有一个地址,但可以把它看成一个对象。引用是运算符重载语法(第12章的主题)的重点,它也为普通函数按值传递方式传递和返回对象增加了语法上的便利。
拷贝构造函数采用相同类型的已存在对象的引用作为它的参数,它可以被用来从现有的对象创建新对象。当用按值传递方式传递或返回一个对象时,编译器自动调用这个拷贝构造函数。虽然,编译器将自动地创建一个拷贝构造函数,但是,如果认为需要有一个拷贝构造函数,应当自己定义一个,以确保完成正确的操作。如果不想通过按值传递方式传递和返回对象,应该创建一个私有的拷贝构造函数。
指向成员的指针和普通指针一样具有相同的功能:可以在运行时选取特定存储单元(数据或函数)。指向成员的指针只和类成员一起工作,而不是和全局数据或函数。通过使用指向成员的指针,我们的程序设计可以在运行时灵活地改变行为。