1.引用
1)引用并不产生对象的复本,仅仅是同义词的概念
2)引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才
初始化它
3)引用就像一个自动被编译器逆向引用的常量型指针,但是它不占存储空间,因此一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用
4)引用的应用:
*传递可变参数,函数内任何对引用的更改将对函数外的参数改变。当你不希望这种修改出现的时候,可以将函数参数定义为常量引用。
*给函数传递大型对象,当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制
2.copy构造函数
1)copy构造函数存在的意义:在一些操作中如果隐含着类的对象的赋值操作,则通过copy构造函数来实现,当用一个已经初始化了的自定义类型对象去初始化另一个新构造的对象的时候,copy构造函数就会被调用。
2)深拷贝和浅拷贝:在某些状况下,类体内的成员是需要开辟动态开辟堆内存的,如果我们不自定义拷贝构造函数而让系统自己处理,那么就会导致堆内存的所属权产生混乱,试想一下,已经开辟的一端堆地址原来是属于对象a的,由于复制过程发生,b对象取得是a已经开辟的堆地址,一旦程序产生析构,释放堆的时候,计算机是不可能清楚这段地址是真正属于谁的,当连续发生两次析构的时候就出现了运行错误。
3.成员指针
c++中一些指针类型的定义:
数据指针 |
T * |
成员数据指针 |
T::* |
函数指针 |
R (*)(...) |
成员函数指针 |
R (T::*)(...) |
指针是指一些内存地址的变量,而在类的内部没有地址的概念,选择一个类的成员相当于在类中偏移,只有把这个偏移和具体的对象的开始地址结合,才能得到实际的地址。因此在定义成员指针时必须说出这个指针使用什么类的对象,如:
int simple::*pm = &simple::a(其中&可以省略)
函数指针:使用函数指针的好处就是当我们需要处理一个可能性很多的情况时,不必使用一个n-case的冗长的条件语句,而只需初期将所有情况的处理函数复制到一个函数指针数组中,调用时以序号作为参数查找到相应的处理函数即可。
阅读(699) | 评论(0) | 转发(0) |