类中构造函数、析构函数与赋值函数的重写
类中构造函数、析构函数与赋值函数的重写
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~String(void); // 析构函数
String & operate=(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
// String 的析构函数
String::~String(void)
{
if (m_data)
{
delete[] m_data; //由于m_data是内部数据类型,可以写成 delete m_data;
m_data = NULL;
}
}
//String的普通构造函数
String::String(const char *str)
{
if (NULL == str)// 若能加 NULL 判断则更好
{
m_data = new char[1];
m_data[0] = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1]; //+1是为'\0'分配一个字符
if (NULL != m_data)
{
strcpy(m_data, str);
}
else {
//异常处理
}
}
}
// 拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);//由于other是condt类型,因此不用判断是否为NULL
m_data = new char[length+1]; //+1是为'\0'分配一个字符
if (NULL != m_data)
{
strcpy(m_data, other.m_data);
}
else {
//异常处理
}
}
// 赋值函数
String & String::operate=(const String &other)
{
if (this == &other) //(1)检查自赋值
{
return *this;
}
delete []m_data;//(2)释放原有的内存资源
m_data = NULL;
//(3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1]; //+1是为'\0'分配一个字符
if (NULL == m_data)
{
...//异常处理
return *this;
}
else
{
strcpy(m_data, other.m_data);
}
//(4)返回本对象的引用
return *this;
}
类中构造函数、析构函数与赋值函数的重写相关推荐
- C++类的构造函数、析构函数与赋值函数
C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...
- String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...
- 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
前言 C++类的成员变量是否含有"指针类型"直接决定了"Big Five"函数(就是标题中的5个函数)的编写!有无指针类型"成员变量造成Big Fiv ...
- 派生类中构造函数与虚构函数的研究
1.继承过程中的构造函数 A:继承与派生过程中,基类的构造函数不能被继承,派生类中需要声明自己的构造函数. B:声明构造函数时,只需要对本类中新增成员进行初始化.至于基类继承过来的成员,应该调用基类的 ...
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...
- PHP类中的__get()和__set函数到底有什么用
PHP类中的__get()和__set函数到底有什么用 一.总结 一句话总结:当试图获取一个不可达变量时,类会自动调用__get.同样的,当试图设置一个不可达变量时,类会自动调用__set.在网站中, ...
- C++ 深拷贝和浅拷贝std::move移动构造函数,移动赋值函数
一个class如果包含了普通指针成员的话那就必须实现(如果是智能指针则则没有必要)特别是复制构造函数和移动构造函数不要忘记 构造函数, 析构函数, 拷贝构造函数, 移动构造函数, 移动赋值函数 拷贝复 ...
- C++多继承中重写不同基类中相同原型的虚函数
在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class ...
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...
最新文章
- 【Web安全】利用burp抓包和CSRF伪造进入admin真实后台
- python装饰器作用-Python装饰器用法实例总结
- BeyondCompare
- 【学习笔记】SAP CO成本估算相关
- Django(part45)--forms模块
- matlab mandrill,MATLAB】MATLAB的自带数据及可生成数据的函数
- 红头文件rgb红色值_拿下抖音小姐姐,我写了个口红色号识别器
- 大连印象_2010暑期实训有感【一】
- flask v0.1 内部运行程序
- Mac Python IDLE中如何更改字体
- N皇后问题(回溯算法解法)
- Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
- 离散时间信号处理第三版英文版课后习题答案
- 函数数列极限求法总结
- myelicpes2019初次使用设置_实况足球2019球员数据编辑器怎么使用
- PHP从入门到精通pdf
- 在上海乐字节学习CRM项目管理
- php美颜相机,手机照片美化软件哪个好|美颜相机官方版-官方版
- iOS上装kali Linux的方法
- This application failed to start because it could not find or load the Qt platform plugin “xcb“.