string类默认生成的函数有哪些?
默认构造函数
析构函数
拷贝构造函数
赋值构造函数
具体实现如下:
#include <iostream>
using namespace std;
class mystring
{
friend ostream &operator<<(ostream &out,const mystring &s);
public:
mystring(const char *str=NULL);
mystring(const mystring &rhs);
~mystring();
mystring &operator=(const mystring &other);
private:
char *m_data;
};
//默认构造函数
mystring::mystring(const char *str)
{
cout << "默认构造函数调用啦。"<<endl;
if(NULL == str)
{
m_data=NULL;
}
else
{
m_data = new char[strlen(str)+1];
strcpy(m_data,str);
}
}
//拷贝构造函数
mystring::mystring(const mystring &rhs)
{
cout << "拷贝构造函数嗲用啦"<<endl;
if(rhs.m_data == NULL)
{
this->m_data = NULL;
}
else
{
this->m_data = new char[strlen(rhs.m_data)+1];
strcpy(this->m_data,rhs.m_data);
}
}
//析构函数
mystring::~mystring()
{
cout << "析构调用啦!!"<<endl;
if(this->m_data != NULL)
{
delete [] this->m_data;
this->m_data = NULL;
}
}
//赋值操作符重载
mystring &mystring::operator =(const mystring &other)
{
cout << "调用赋值操作符了。"<<endl;
if(this != &other)
{
delete [] this->m_data;
if(!other.m_data)
{
this->m_data = NULL;
}
else
{
this->m_data = new char[strlen(other.m_data)+1];
strcpy(this->m_data,other.m_data);
}
}
else
{
return *this;
}
}
//友元函数----输出操作符
ostream &operator<<(ostream &os,const mystring &s)
{
os << s.m_data;
return os;
}
void main()
{
mystring m("hello");//调用默认构造函数
mystring b = m;//调用赋值操作符
cout << b <<endl;
}