类string的构造函数、析构函数和赋值函数
来源:互联网 发布:linux系统上网 编辑:程序博客网 时间:2024/06/06 21:44
{
public:
String(const char *str = NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~ String(void); //析构函数
String & operator =(const String &other); //赋值函数
private:
char *m_data;
};
//析构函数
String::~String(void)
{
delete []m_data; //由于m_data是内部数据类型,也可以写成 delete m_data;
}
//普通构造函数
String::String(const char *str)
{
if(str==NULL) //指针可能是空的
{
m_data = new char[1];
*m_data = ‘\0’;
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
//拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);//引用不可能是空,因此不用判断
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
//赋值函数1
String & String::operator =(const String &other)
{
//(1)检查自赋值,若不检查,第二部会删除掉自己的数据
if(this == &other)
return *this;
//(2)释放原有的内存资源
delete [] m_data;
//(3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加 NULL 判断则更好
strcpy(m_data, other.m_data);
//(4)返回本对象的引用
return *this;
}
//赋值函数2
String & String::operator =(const String &other)
{
//(1)用临时指针
char *tmp = new char[strlen(other.m_data)+1];
strcpy(tmp, other.m_data);
//(2)释放原有的内存资源
delete []m_data;
//(3)指向临时指针
m_data = tmp;
//(4)返回本对象的引用
return *this;
}
====================================
赋值运算符(operator=)和拷贝构造函数:A(A& a){}都是用已存在A的对象来创建另一个对象B。不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的;拷贝构造函数是生成一个全新的对象,即调用复制构造函数之前B不存在。
CTemp B(A); //拷贝构造函数,C++风格的初始化
CTemp B=A; //仍然是拷贝构造函数,不过这种风格只是为了与C兼容,与上面的效果一样
在这之前B不存在,或者说还未构造好。
CTemp B;
B = A; //赋值运算符
在这之前B已经通过默认构造函数构造完成。
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- String 的构造函数、析构函数和赋值函数
- string的构造函数,析构函数和赋值函数
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- String类的构造函数,析构函数,拷贝构造函数和赋值函数
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
- 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数
- string类的构造函数、析构函数、拷贝构造函数和赋值函数
- 编写类String 的构造函数、拷贝构造函数、析构函数和赋值函数
- 写String类的普通构造函数,析构函数,拷贝构造函数和赋值函数
- 类String的构造函数,析构函数,赋值函数
- String的构造函数、析构函数和赋值数
- 网易游戏笔试题:编写string类的构造函数、拷贝构造函数、赋值构造函数和析构函数
- String的构造函数,拷贝构造函数、析构函数和赋值函数
- String构造函数,析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- 编写类String的构造函数,析构函数和赋值函数
- 编写类String的构造函数、析构函数和赋值函数
- DIV层浮动问题
- java中thread的start()和run()的区别
- Lucene的各种query
- C++中堆和栈的比较表
- Spring对访问路径进行配置(spring-servlet.xml)
- 类string的构造函数、析构函数和赋值函数
- LP-630K打印机无法插入放发票或纸张,只要一碰到就发出滴滴滴滴的声音的解决方法
- 理解 pkg-config 工具
- Poj 1014 Dividing//多重背包
- oracle 触发器详解
- Android 中电源状态切换
- 高效分页存储过程,请配合AspNetPager使用
- native-activity 工程完全注解
- Hdu 1394 Minimum Inversion Number、Poj 2299 Ultra-QuickSort