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;
}
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!