构造函数,拷贝构造函数,赋值函数
时间:2010-06-10 来源:bestilyq
构造函数与一般函数的区别:
1、构造函数名必须和类名完全相同;而一般函数则不能和类名相同。
2、构造函数的功能主要用于在类的对象创建时定义初始化的状态,它没有返回值,也不能用void来修饰。
3、构造函数不能被直接调用,必须通过new运算符在创建对象时才会调用,一般方法在程序执行到它的时候被调用。
拷贝构造函数:
格式:构造函数名(对象的引用)
以下几种情况会用到拷贝构造函数:
1、一个对象以值传递的方式传入函数体(作为形参)。
2、一个对象以值传递的方式从函数返回(作为返回值)。
3、一个对象需要通过另一个对象进行初始化。
当对象中有指针时,必须使用“深复制”拷贝构造函数。
注意:拷贝构造函数不可以改变它所引用的对象,最好使用const修饰。原因是:当一个对象以值传递的方式传入一个函数的时候,拷贝构造函数自动被调用来生成函数中的对象。如果一个对象被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象,这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出。
赋值函数:赋值符的重载函数
形式为:A& A::operator = (const A& a)
实现流程为:首先判断当前对象与引用传递对象是否是同一个对象,如果是,直接return *this;否则先释放当前对象的堆内存,然后分配足够长度的堆内存,return *this。
1、构造函数名必须和类名完全相同;而一般函数则不能和类名相同。
2、构造函数的功能主要用于在类的对象创建时定义初始化的状态,它没有返回值,也不能用void来修饰。
3、构造函数不能被直接调用,必须通过new运算符在创建对象时才会调用,一般方法在程序执行到它的时候被调用。
拷贝构造函数:
格式:构造函数名(对象的引用)
以下几种情况会用到拷贝构造函数:
1、一个对象以值传递的方式传入函数体(作为形参)。
2、一个对象以值传递的方式从函数返回(作为返回值)。
3、一个对象需要通过另一个对象进行初始化。
当对象中有指针时,必须使用“深复制”拷贝构造函数。
注意:拷贝构造函数不可以改变它所引用的对象,最好使用const修饰。原因是:当一个对象以值传递的方式传入一个函数的时候,拷贝构造函数自动被调用来生成函数中的对象。如果一个对象被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象,这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出。
赋值函数:赋值符的重载函数
形式为:A& A::operator = (const A& a)
实现流程为:首先判断当前对象与引用传递对象是否是同一个对象,如果是,直接return *this;否则先释放当前对象的堆内存,然后分配足够长度的堆内存,return *this。
相关阅读 更多 +