- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
333几种特殊运算符的重载
几种特殊运算符的重载
【】
#include <iostream>
using namespace std;
class CMyString
{
private:
char *m_pszData;
public:
CMyString(char *pszData); //构造函数
CMyString(CMyString &objStr); //拷贝构造函数
CMyString &operator=(CMyString &objStr); //重载=操作符
CMyString &operator=(char *pszData); //重载=操作符
printS()
{
cout<<m_pszData<<endl;
};
~CMyString()
{
delete []m_pszData;
}
};
CMyString::CMyString(char *pszData)
{
m_pszData=new char[strlen(pszData)+1];
strcpy(m_pszData,pszData);
}
CMyString::CMyString(CMyString &objStr)
{
m_pszData=new char[strlen(objStr.m_pszData)+1];
strcpy(m_pszData,objStr.m_pszData);
}
CMyString &CMyString::operator=(CMyString &objStr)
{
if(this==&objStr)
return *this;
delete []m_pszData;
m_pszData=new char[strlen(objStr.m_pszData)+1];
strcpy(m_pszData,objStr.m_pszData);
return *this;
}
CMyString &CMyString::operator=(char *pszData)
{
delete []m_pszData;
m_pszData=new char[strlen(pszData)+1];
strcpy(m_pszData,pszData);
return *this;
}
int main()
{
CMyString s1="abc";//调用拷贝构造函数CMyString(char *pszData)
s1.printS();
CMyString s2="xyz";//调用拷贝构造函数CMyString(char *pszData)
s2.printS();
s1="123";//调用赋值函数CMyString &operator=(char *pszData)
s1.printS();
s1=s2; //调用赋值函数CMyString &operator=(CMyString &objStr)
s1.printS();
return 0;
}
程序运行结果如下:
abc
xyz
123
xyz
Press any key to continue
注意:
赋值运算符和拷贝构造函数的区别和联系
相同点:都是将一个对象COPY到另一个中去
不同点:拷贝构造函数涉及到要新建立一个对象。在以下三种情况下要调用拷贝构造函数:
1) 形如 A a = b;由于对象a是新建的对象,所以这种情况并不调用赋值运算符,而是要调用拷贝构造函数。
2) 对象做函数参数时,由于要在堆栈中建立新对象,所以要调拷贝构造函数
3) 对象是函数的返回值,而赋值运算符不涉及到对象的建立。
在一个对象中如果不定义赋值运算符和拷贝构造函数,编译器将为之生成默认的赋值运算符和拷贝构造函数,它只进行按位COPY,来实现对象的COPY或赋值。一般来讲当一个类定义有指针,默认的赋值运算符和拷贝构造函数将不能完成对象的赋值和COPY,因为按位COPY的结果是将一对象的指针值COPY 到另一个对象中,这会引起相同的内存被多个对象引用的错误。
这时要注意一个问题:引用或指针做函数参数或返回值时,函数调用时会不会调用类的拷贝构造函数呢?是不会的,因为函数在调用时不会涉及到新对象的建立,仅仅是将原对象的地址进行了COPY。
(2) [ ]下标运算符重载
标准情况下,[ ]运算符用于访问数组的元素。我们可以通过重载下标运算符为类运算符。使得可以象访问数组元素一样的访问对象中的成员变量。C++只允许把下标运算符重载为非静态的成员函数。
下标运算符的定义形式为:
T1 T::operator[] (index);
其中T1为希望返回的数据类型,T为类名,index为下标,一般的情况下是整型的数据类型。如需访
您可能关注的文档
- 2011年基层单位创先争优工作汇报.doc
- 2011年公路工程试验检测人员考试路基路面试题(1-10).doc
- 2011年县工会职工书屋建设总结和2012年计划.doc
- 2011年小学期末教学质量检测模拟数学卷答案与评分标准.doc
- 2011年广州市高中二年级学生学业水平测试生物试题.doc
- 2011年山东省公务员录用考试《行测》真题.doc
- 2011年江苏省普通高中学业水平测试化学模拟试卷(二).doc
- 2011年度矿井反风演习方案及报告.docx
- 2011年油井上半年工作总结.doc
- 2011年测风工技能大赛实际操作方案.doc
- 2023年枣庄市重点中学物理高三上期末达标检测试题含解析.doc
- 2024届安徽省淮北师大附属实验中学物理高三上期末调研模拟试题含解析.doc
- 2024届北京海淀高三物理第一学期期末综合测试模拟试题含解析.doc
- 2024届安徽省六安市第一中学、合肥八中、阜阳一中三校物理高三第一学期期末检测试题含解析.doc
- 2024届北京市昌平区市级名校物理高三第一学期期末质量检测试题含解析.doc
- 2023年云南省丘北二中物理高三上期末学业质量监测试题含解析.doc
- 2023年云南省昆明三中滇池中学物理高三上期末复习检测模拟试题含解析.doc
- 2024届北京市海淀区十一学校高三物理第一学期期末经典试题含解析.doc
- 2024届北京海淀物理高三第一学期期末联考模拟试题含解析.doc
- 2024届北京市101中学物理高三第一学期期末调研模拟试题含解析.doc
文档评论(0)