String 类的原型如下
class String
{
public:
String(const char *str=NULL); //构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String& operator=(const String &other); //等号操作符重载,赋值函数
ShowString();
private:
char *m_data;  //字符指针
};
String::~String()
{
delete [] m_data; //析构函数,释放地址空间
}
String::String(const char *str)
{
if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'/0';
{
m_data=new char[1];
*m_data='/0';
}
else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)//拷贝构造函数,功能与构造函数类似。
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other) //赋值函数
{
if (this==&other)//当地址相同时,直接返回;
return *this; 
delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this; 
}
String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
cout<<this->m_data<<endl;
}
测试一下: 
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
=========================================================================
再来淡淡关于拷贝构造函数和赋值函数的使用比较
上例是比较拷贝构造函数和赋值函数很好的示例。
拷贝构造函数,首先是一个构造函数,因此函数实现的是拷贝它唯一const参数引用变量(也是对象)的内部数据作为初始化。所以对象创建时使用构造拷贝函数(这时需要初始化对象)。
而赋值函数则不同。赋值函数属于类的成员函数,并且是一个运算符重载函数。该函数应用在对象已经创建后,需要对对象赋值时使用。由于是重载函数,返回的是一个对象,而拷贝构造函数不用返回任何值。
String a("zhangbufeng");
String b("cuixiaoyuan");
String c(a);//对象创建时,使用拷贝构造函数
c=b; //c已经被初始化,从而调用了赋值函数。

string类的构造函数,拷贝构造函数,析构函数和赋值函数相关推荐

  1. String 的普通构造函数、拷贝构造函数、析构函数、赋值函数

    转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...

  2. 类中构造函数、析构函数与赋值函数的重写

    类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...

  3. C++类的构造函数、析构函数与赋值函数

    C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...

  4. C++类中的拷贝构造函数

    文章目录 前言 二.拷贝构造函数 1.拷贝构造函数定义 2.默认拷贝构造函数存在的问题 3.解决方式 三 总结 四 参考 如有错误,希望大家批评指正,日拱一卒,功不唐捐. 前言 最近项目的技术栈是C+ ...

  5. C++类对象的拷贝构造函数(转载)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. ...

  6. Java基础:String类支持几种构造函数?

    String类支持几种构造函数.将创建空String的构造函数称为默认构造函数.例如, String s = new String(); 将创建一个String实例,该实例中不包含字符. 通常希望创建 ...

  7. 什么是拷贝构造函数?拷贝构造函数何时被调用

    1.什么是拷贝构造函数: CA(const CA& C)就是我们自定义的拷贝构造函数.可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变 ...

  8. 【C++】构造函数 无参构造函数 有参构造函数 拷贝构造函数内联函数

    文章目录 函数的定义 函数的的使用方法 函数的返回值 值传递 指针传递 引用传递 C++引用作为函数返回值 函数重载(Function Overloading) 运算符重载(Operator Over ...

  9. string类的实现(构造函数,析构函数,运算符重载)

    String类的代码: class String { public:String(char* str=""){_str = new char[strlen(str) + 1];st ...

最新文章

  1. (C++)对用户输入的整形数组进行冒泡排序
  2. linux装nginx
  3. Kubernetes-基于k8s-v1.14.2安装dashboard-1.10.1
  4. (原)数据结构——线索二叉树
  5. 金蝶BOS开发中Edit编辑界面和List叙事薄界面需要写的代码
  6. ODataModel.submitBatch by default Asynchronous
  7. 59 MM配置-后勤发票校验-维护税代码缺省值
  8. 图形裁剪算法matlab,MATLAB裁剪图片
  9. uni-app 写了一个网易云微信小程序
  10. 阿里云服务器Ubuntu16.04安装Anaconda(python3.6)和本地远程连接jupyter
  11. 50. Element removeChild() 方法
  12. 【BZOJ2115】Xor(线性基---求无向图1-n路径上最大的边权异或值--可出现环)
  13. Matlab程序转为C++代码
  14. maven的下载与安装教程(超详细)
  15. 重构实践——利用配置文件实现设计的高度抽象
  16. 分享一篇投稿英文期刊该如何回复审稿人的文章
  17. 真牛,大神将Windows 10改造成Windows XP(EXPERIENCE Freestyle)
  18. MySQL--新手必备SQL基础知识、事务ACID及隔离级别
  19. java 常用类 - 大数据运算
  20. 不想复制粘贴了,爬取TED视频的语言脚本

热门文章

  1. parted命令 Linux 分区超过2TB硬盘
  2. this指向_前端面试之彻底搞懂this指向
  3. JavaScript---函数
  4. 每天一个小程序—0004题(统计单词出现次数)
  5. 8.21 :odd??:nth-of-type??
  6. jqmobile小技巧
  7. Prism4文档翻译(第九章 第二部分)
  8. 用Dreamweaver+ASP实现分页技术的参考
  9. flutter PageView上下滑动切换视图
  10. 浅谈Java设计模式