拷贝构造函数与赋值构造函数
2016-04-29 21:48
399 查看
#include<iostream>
#include<cstring>
using namespace std;
class String
{
private:
char *m_data;
public:
String(const char *str);
String(const String &other);
String & operator=(const String &other);
~String();
};
String::String(const char *str)
{
cout<<"自定义构造函数"<<endl;
if(str == NULL) {
m_data = new char[1];
m_data = '\0';
} else {
int len = strlen(str);
m_data = new char[len + 1];
strcpy(m_data,str);
}
}
String::String(const String &other)
{
cout<<"自定义复制构造函数"<<endl;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data,other.m_data);
}
String & String::operator=(const String &other)
{
cout<<"自定义赋值函数"<<endl;
if(this == &other)
return *this;
else {
delete [] m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data,other.m_data);
return *this;
}
}
String::~String()
{
delete [] m_data;
}
int main()
{
cout << "a(\"abc\")" << endl;
String a("abc");
cout << "b(\"cde\")" << endl;
String b("cde");
cout << " d = a" << endl;
String d = a;
cout << "c(b)" << endl;
String c(b);
cout << "c = a" << endl;
c = a;
getchar();
return 0;
}
#include<cstring>
using namespace std;
class String
{
private:
char *m_data;
public:
String(const char *str);
String(const String &other);
String & operator=(const String &other);
~String();
};
String::String(const char *str)
{
cout<<"自定义构造函数"<<endl;
if(str == NULL) {
m_data = new char[1];
m_data = '\0';
} else {
int len = strlen(str);
m_data = new char[len + 1];
strcpy(m_data,str);
}
}
String::String(const String &other)
{
cout<<"自定义复制构造函数"<<endl;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data,other.m_data);
}
String & String::operator=(const String &other)
{
cout<<"自定义赋值函数"<<endl;
if(this == &other)
return *this;
else {
delete [] m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data,other.m_data);
return *this;
}
}
String::~String()
{
delete [] m_data;
}
int main()
{
cout << "a(\"abc\")" << endl;
String a("abc");
cout << "b(\"cde\")" << endl;
String b("cde");
cout << " d = a" << endl;
String d = a;
cout << "c(b)" << endl;
String c(b);
cout << "c = a" << endl;
c = a;
getchar();
return 0;
}
相关文章推荐
- 虚继承类内存大小计算
- RocEDU.阅读.写作《苏菲的世界》书摘
- webpack loader
- 我的Android进阶之旅------>RxJava学习资料汇总
- Application和Session对象
- 关键代码段(临界区)实现线程死锁
- 获取浏览器名称和版本号
- Java Runnable and Thread
- iOS开发中 实现登录时关于使用QQ做为第三方授权登录的问题
- POJ 2001:Shortest Prefixes
- Android wifi解析
- 第九周周赛——周赛兼组队赛第一场题解(出自HDU5443,本oj,HDU 5667,poj1742,codeforces 664A,BUNOJ 28199)
- jdbc:mysql中文出现?解决方案
- set multiset c++ stl
- spring PROPAGATION
- 线段树
- iOS开发总结之 NSString和NSMutableString
- 文章标题
- 二叉排序树
- 策略模式