String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398
题目:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:
解答:
(1)//普通构造函数
构造函数:构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中,特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。
String::String(const char *str)
{if(str == NULL){m_data = newchar[1]; *m_data ='\0';}else{int length = strlen(str);m_data = newchar[length+1]; strcpy(m_data,str);}
}
(2)//拷贝构造函数
拷贝构造函数:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
String::String(const String &other)
{int length = strlen(other.m_data);m_data = newchar[length+1]; strcpy(m_data,other.m_data);
}
(3)// String的析构函数
析构函数:析构函数(destructor) 与构造函数相反,当对象脱离其作用于时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
String::~String(void)
{delete []m_data; // 或deletem_data;
}
(4)//赋值函数
String & String::operate =(const String&other) // 输入参数为const型
{if(this == &other) //检查自赋值return *this;delete []m_data; //释放原有的内存资源int length = strlen( other.m_data );m_data = newchar[length+1]; //对m_data加NULL 判断strcpy(m_data, other.m_data );return *this; //返回本对象的引用
}
注意:在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数。
String 的普通构造函数、拷贝构造函数、析构函数、赋值函数相关推荐
- 什么是拷贝构造函数?拷贝构造函数何时被调用
1.什么是拷贝构造函数: CA(const CA& C)就是我们自定义的拷贝构造函数.可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变 ...
- 【C++】构造函数 无参构造函数 有参构造函数 拷贝构造函数内联函数
文章目录 函数的定义 函数的的使用方法 函数的返回值 值传递 指针传递 引用传递 C++引用作为函数返回值 函数重载(Function Overloading) 运算符重载(Operator Over ...
- C++编程思想 第1卷 第11章 引用和拷贝构造函数 拷贝构造函数 拷贝构造函数
编译器对如何从现有的对象产生新的对象进行了假定. 当通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的 对象是由函数体外的原来存在的对象传递的 编译器假定我们想使用位拷贝来创建对象 每当 ...
- C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)
1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...
- 构造函数,拷贝构造函数,赋值函数
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个 ...
- 基础备忘:拷贝构造函数和赋值函数
3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...
- C++ 拷贝构造函数 赋值构造函数
关键字: C++ 默认拷贝构造函数的行为如下: 默认的拷贝构造函数执行的顺序与其他用户定义的构造函数相同,执行先父类后子类的构造. 拷贝构造函数对类中每一个数据成员执行成员拷贝(me ...
- 拷贝构造函数和赋值函数(转)
标签: 无标签 原帖地址:http://www.programfan.com/blog/article.asp?id=10944 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象 ...
- 拷贝构造函数和赋值函数
3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...
最新文章
- Python实现前端AES加密方式分析,***密码学必备!
- 使用canvas实现数据可视化
- python之禅怎么关闭_《Python之禅》中对于Python编程过程中的一些建议
- centos编译mysql5.6_centos7上编译安装mysql5.6
- 计算机boot进入u盘启动,暗影精灵5怎么设置u盘启动 暗影精灵5设置u盘启动方法...
- [Unity][NodeCanvas] 通过 .value 获取 BBParameter 黑板值
- php生成随机不重复的数字_PHP生成不重复随机数的几种方法
- 使用p4c将P4 14代码转换为16代码
- Shell脚本学习指南
- Innoreader + Rsshub
- android快速仿花椒,映客直播上下滑动切换直播间
- 微星超龙显卡的性能模式无法开机的原因与解决办法
- 安卓6.0权限处理在项目中的实践
- 微信小程序网易云音乐轮播图右侧留白
- 北大惠普金融指数-匹配企业绿色创新指数2011-2020年:企业名称、年份、行业分类等多指标数据
- oracle恢复误删的表
- Android Hawk数据库 github开源项目,字节跳动社招面试记录
- [Chrome] 超级好用的网页保存插件
- webpack源码解析
- JPEG原理分析 及 JPEG解码器的调试