已知类String 的原型为:

class String

{

public:

String(const char *str=NULL);//普通构造函数

String(const String &other);//拷贝构造函数

~String(void);

String & operate=(const String &other);//赋值函数

private:

char *m_data;//用于保存字符串

};

参考:http://blog.csdn.net/zhuimengzh/article/details/6708882

#include<iostream>
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_data;//用于保存字符串

};String::~String(void)//析构函数
{delete []m_data;
}
String::String(const char *str)//构造函数
{if(str==NULL){m_data=new char[1];if(m_data==NULL){//检查内存申请是否成功std::cout<<"申请内存失败!"<<std::endl;exit(1);}m_data='\0';}else{m_data=new char[strlen(str)+1];if(m_data==NULL){//检查内存申请是否成功std::cout<<"申请内存失败!"<<std::endl;exit(1);}strcpy(m_data,str);}
}
String::String(const String &str)//输入参数为const,为什么要为const
{if(str.m_data==NULL){m_data=new char[1];if(m_data==NULL){//检查内存申请是否成功std::cout<<"申请内存失败!"<<std::endl;exit(1);}m_data='\0';}else{m_data=new char[strlen(str.m_data)+1];if(m_data==NULL){//检查内存申请是否成功std::cout<<"申请内存失败!"<<std::endl;exit(1);}strcpy(m_data,str.m_data);}
}
String& String::operator=(const String &str)
{if(this==&str)//检查自赋值return *this;delete [] m_data;m_data=new char[strlen(str.m_data)+1];if(m_data==NULL){//检查内存申请是否成功std::cout<<"申请内存失败!"<<std::endl;exit(1);}strcpy(m_data,str.m_data);return *this;
}
int main()
{String a;String b("abc");a=b;printf("%s",b);printf("%s",b);return 0;
}

解释:拷贝函数和赋值函数中const的作用。

1),String s1("hello"); Const String s2("wj"); s1=s2;

这里会出错,因为一个const变量是不能随意转化为非const变量的。

2)  String s1("hello"); String s2("wj");String s3;

s3=s1+s2; “+”赋值必须返回一个操作值已知的String对象,除非它是一个const对象。

转载于:https://www.cnblogs.com/wj204/p/3349463.html

实现类的构造函数,析构函数和赋值函数相关推荐

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

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

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

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

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

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

  4. 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数

    前言 C++类的成员变量是否含有"指针类型"直接决定了"Big Five"函数(就是标题中的5个函数)的编写!有无指针类型"成员变量造成Big Fiv ...

  5. C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

    C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...

  6. C++ 深拷贝和浅拷贝std::move移动构造函数,移动赋值函数

    一个class如果包含了普通指针成员的话那就必须实现(如果是智能指针则则没有必要)特别是复制构造函数和移动构造函数不要忘记 构造函数, 析构函数, 拷贝构造函数, 移动构造函数, 移动赋值函数 拷贝复 ...

  7. C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765

    https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...

  8. 类String的构造函数、析构函数和赋值函数

    一.类String的原型为: 1 class String 2 { 3 public: 4 String(const char *str = NULL); //普通构造函数 5 6 ~String(v ...

  9. string类的构造函数,拷贝构造函数,析构函数和赋值函数

    String 类的原型如下 class String { public: String(const char *str=NULL); //构造函数 String(const String &o ...

最新文章

  1. php get 传循环出来的参数_PHP性能优化小技巧
  2. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
  3. 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )
  4. php mysql 非空_MySQL非空约束(NOT NULL)
  5. Noise噪音halcon算子,持续更新
  6. linux下python_linux下python安装
  7. as真机调试_如何使用真机调试android程序
  8. 第三十一章 考试作弊
  9. 【笔记】树莓派配置麦克风录音
  10. Learn ZYNQ (7)
  11. Java设计模式学习记录-模板方法模式
  12. 一维码与二维码对比介绍
  13. word怎么只删除英语保留汉语或删除汉语保留英文
  14. ftp 报错 550 Failed to open file
  15. oracle同义词不再有效,ORA-00980: 同义词转换不再有效
  16. supermap制作专题图并发布
  17. vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
  18. JAVA:实现CircularBuffer环形缓冲器算法(附完整源码)
  19. 过滤掉URL中的参数部分
  20. 微信小程序调用科大讯飞 在线合成语音接口(文字转语音)

热门文章

  1. 6个技术问题及解决方案
  2. 超图Cesium二三维切换
  3. 使用Java框架Pronghorn编写快速的应用程序
  4. 非洲做生意进货渠道_WikiFundi如何帮助非洲人民为维基百科做贡献
  5. emacs扩展功能_3个用于组织的Emacs扩展
  6. android开源2016_开源多样性努力在2016年获得动力
  7. SecureDrop 0.3,LibreOffice Online和更多新闻
  8. HTML wbr元素
  9. es6 作为属性名的 Symbol
  10. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM