实现类的构造函数,析构函数和赋值函数
已知类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
实现类的构造函数,析构函数和赋值函数相关推荐
- 类中构造函数、析构函数与赋值函数的重写
类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...
- C++类的构造函数、析构函数与赋值函数
C++类的构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和 ...
- String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...
- 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
前言 C++类的成员变量是否含有"指针类型"直接决定了"Big Five"函数(就是标题中的5个函数)的编写!有无指针类型"成员变量造成Big Fiv ...
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...
- C++ 深拷贝和浅拷贝std::move移动构造函数,移动赋值函数
一个class如果包含了普通指针成员的话那就必须实现(如果是智能指针则则没有必要)特别是复制构造函数和移动构造函数不要忘记 构造函数, 析构函数, 拷贝构造函数, 移动构造函数, 移动赋值函数 拷贝复 ...
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...
- 类String的构造函数、析构函数和赋值函数
一.类String的原型为: 1 class String 2 { 3 public: 4 String(const char *str = NULL); //普通构造函数 5 6 ~String(v ...
- string类的构造函数,拷贝构造函数,析构函数和赋值函数
String 类的原型如下 class String { public: String(const char *str=NULL); //构造函数 String(const String &o ...
最新文章
- php get 传循环出来的参数_PHP性能优化小技巧
- 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
- 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )
- php mysql 非空_MySQL非空约束(NOT NULL)
- Noise噪音halcon算子,持续更新
- linux下python_linux下python安装
- as真机调试_如何使用真机调试android程序
- 第三十一章 考试作弊
- 【笔记】树莓派配置麦克风录音
- Learn ZYNQ (7)
- Java设计模式学习记录-模板方法模式
- 一维码与二维码对比介绍
- word怎么只删除英语保留汉语或删除汉语保留英文
- ftp 报错 550 Failed to open file
- oracle同义词不再有效,ORA-00980: 同义词转换不再有效
- supermap制作专题图并发布
- vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
- JAVA:实现CircularBuffer环形缓冲器算法(附完整源码)
- 过滤掉URL中的参数部分
- 微信小程序调用科大讯飞 在线合成语音接口(文字转语音)