C++中的三大函数和操作符重载(Boolan)
C++中三大函数:
- 析构函数
- 复制构造函数
- =操作符(copyassignmentoperator)
这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。
析构函数:
形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。
复制构造函数:
形如foo_t(constfoo_t&foo),以下情况复制构造函数均会被调用:
- 当对象按值返回时候(returnedbyvalue)
- 调用按值传参的函数(passedbyvalue)
- 通过thrown抛出或caught捕获的对象
- 对象处于()包围的初始化列表中
=操作符:
重载=操作符,如foo_t&operator=(constfoo_t&foo),对已有对象的赋值操作将调用该函数(未初始化的对象成员将调用复制构造函数)。
以下为代码实例:
#include<cstring> #include<iostream> classfoo_t{ friendstd::ostream&operator<<(std::ostream&os,foo_tconst&foo){ os<<foo.data; returnos; } public: foo_t(void):data(newchar[14]){std::strcpy(data,"Hello,World!");} ~foo_t(void){delete[]data;} foo_t(constfoo_t&other); foo_t&operator=(constfoo_t&other); private: char*data; }; foo_t::foo_t(constfoo_t&other){ std::cout<<"callcopyconstructor!!!"<<std::endl; this->data=newchar[strlen(other.data)+1]; strcpy(this->data,other.data); } foo_t&foo_t::operator=(constfoo_t&other){ std::cout<<"callthecopyassignmentoperator!!!"<<std::endl; if(this==&other) return*this; this->data=newchar[strlen(other.data)+1]; strcpy(this->data,other.data); return*this; } intmain(){ foo_tfoo; std::cout<<foo<<'\n'; foo_tt(foo); //foo_tt2=t; foo_tt3; t3=t; return0; }
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!