拷贝构造函数与赋值函数 的鉴别
来源:互联网 发布:域名进入赎回期 编辑:程序博客网 时间:2024/04/30 16:44
(1)测试一下自己,能区分么?
String a("zhangbufeng");
String b("cuixiaoyuan");
String c(a);//对象创建时,使用拷贝构造函数
c=b; //c已经被初始化,从而调用了赋值函数。上次多写了个String,造成了重定义。
(2) code 验证
#include <iostream>
#include <string>
using namespace std;
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~String(void); // 析构函数
String & operator =(const String &other); // 赋值函数
private:
char *m_String; //私有成员,保存字符串
};
String::~String(void)
{
cout<<"Destructing"<<endl;
delete [] m_String;
}
String::String(const char *str)
{
cout<<"Construcing"<<endl;
if(str==NULL)
{
m_String = new char[1];
*m_String = '/0';
}
else
{
int length = strlen(str);
m_String = new char[length+1];
strcpy(m_String, str);
}
}
String::String(const String &other)
{
cout<<"Constructing Copy"<<endl;
int length = strlen(other.m_String);
m_String = new char[length+1];
strcpy(m_String, other.m_String);
}
String & String::operator =(const String &other)
{
cout<<"Operate = Function"<<endl;
//检查自赋值
if(this == &other)
return *this;
//释放原有的内存资源
delete [] m_String;
//分配新的内存资源,并复制内容
int length = strlen(other.m_String);
m_String = new char[length+1];
strcpy(m_String, other.m_String);
//返回本对象的引用
return *this;
}
void main()
{
String a("zhangbufeng");
String b("cuixiaoyuan");
String c(a);
c=b;
String d=a;
}
- 拷贝构造函数与赋值函数 的鉴别
- 拷贝构造函数 与 拷贝赋值函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值构造函数
- 拷贝构造与赋值函数
- 拷贝构造函数与赋值构造函数的区别
- 拷贝构造函数与赋值构造函数的区别
- C++的拷贝构造函数与赋值构造函数
- 拷贝构造函数与赋值函数
- C++赋值函数与拷贝构造函数
- 拷贝构造函数与赋值函数
- C++ 拷贝构造函数与赋值函数
- C++拷贝构造函数与赋值函数
- 拷贝构造函数与赋值函数
- 3.1 汇编语言的基本要素
- 开通了么?
- 索引类型和索引使用原则
- 激光打印机的原理、碳粉分类
- 3.2 例子:三个整数加减
- 拷贝构造函数与赋值函数 的鉴别
- 这也算涨工资?
- 各国的离婚规定,大千世界无奇不有!
- 【个人学习2之-与字符相关的问题】
- 字符串反转
- 如何从文件路径中得到文件名及其扩展名
- 国家可信软件资源库及协同生产环境
- 有关于部分国产手机的指令(mtk6227)
- 深入学习GridBagLayout