#include <iostream>
#include <string.h> using namespace std; class String
{
char* m_data;
public:
String(const char* p = NULL)
{
if(p == NULL)
{
m_data = new char[];
*m_data = '\0';
}
else
{
m_data = new char[strlen(p) + ];
strcpy(m_data, p);
}
} String(const String & other)
{
if(&other != this)
{
//delete [] m_data; //¹¹Ô캯ÊýÖв»ÐèÒªdelete momory:w
m_data = new char[strlen(other.m_data) + ];
strcpy(m_data, other.m_data);
}
} ~String()
{
delete [] m_data;
} String& operator=(const String & other)
{
if(&other != this)
{
delete [] m_data;
m_data = new char[strlen(other.m_data) + ];
strcpy(m_data, other.m_data);
}
return *this; }
friend String operator+(const String &s1, const String &s2);
friend inline ostream & operator << (ostream & os, String &str); }; String operator+(const String &s1, const String &s2)
{
String temp;
delete [] temp.m_data; // temp.data Êǽöº¬¡®\0¡¯µÄ×Ö·û´®
temp.m_data = new char[strlen(s1.m_data) + strlen(s2.m_data) +];
strcpy(temp.m_data, s1.m_data);
strcat(temp.m_data, s2.m_data);
return temp;
} ostream & operator << (ostream & os, String &str)
{
os << str.m_data << endl;
return os;
} int main()
{
String str1("abc");
cout << str1; String str2(str1);
cout << str2; String str3;
cout << str2;
str3 = str2; String str4("def"); String str5;
str5 = str3 + str4;
cout << str5;
}

从String类看写C++ class需要注意的地方的更多相关文章

  1. String类的写时拷贝

    #include<iostream>using namespace std; class String;ostream& operator<<(ostream & ...

  2. (转)C++——std::string类的引用计数

    1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里 ...

  3. 使用引用计数和copy-on_write实现String类

    本文写于2017-01-18,从老账号迁移到本账号,原文地址:https://www.cnblogs.com/huangweiyang/p/6295420.html 这算是我开始复习的内容吧,关于st ...

  4. 扩展C++ string类

    在实际开发过程中,C++string类使用起来有很多不方便的地方,笔者根据根据这些不足简单的扩展了这个类,如增加与数字之间的相互转化和格式化字符串.不足的地方望指正.读者也可以根据自己需求继续扩展. ...

  5. cpp 实现简易String类

    需求 实现一个String类 自己写的String headers/String.h #ifndef __MYSTRING__ #define __MYSTRING__ #include <st ...

  6. String类源码分析

    1.String类注释说明 /** * The {@code String} class represents character strings. All * string literals in ...

  7. String类的实现(4)写时拷贝浅析

    由于释放内存空间,开辟内存空间时花费时间,因此,在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间.这种方法就是写时拷贝.这也是一种 ...

  8. String 类的实现(2)引用计数与写时拷贝

    1.引用计数 我们知道在C++中动态开辟空间时是用字符new和delete的.其中使用new test[N]方式开辟空间时实际上是开辟了(N*sizeof(test)+4)字节的空间.如图示其中保存N ...

  9. 自己实现简单的string类

    1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C ...

随机推荐

  1. 【学习笔记】【C语言】变量

    1. 什么是变量 当一个数据的值需要经常改变或者不确定时,就应该用变量来表示.比如游戏积分. 2. 定义变量 1> 目的 任何变量在使用之前,必须先进行定义. 定义变量的目的是:在内存中分配一块 ...

  2. Linux 静态库与动态库搜索路径设置详解【转】

    原文地址:http://blog.chinaunix.net/uid-29025972-id-3855495.html 1. 连接和运行时库文件搜索路径的设置 库文件在连接(静态库和共享库)和运行(仅 ...

  3. AR模式

    AR模式 在ThinkPHP框架中,一共存在两种操作模式:ORM模式与AR模式 ORM模式:① 实例化模型 ② 创建数据对象组装数组 ③ 调用相关方法执行相关操作 AR模式:① 实例化模型 ② 把数据 ...

  4. OpenJudge 666:放苹果

    总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输 ...

  5. VC按钮控件实现指示灯效果

    VC为按钮控件添加图片的方法有很多种: 直接调用SetBitmap:  CButton pButton->SetBitmap(hBitmap); 使用CButtonST控件: 使用CDC: 使用 ...

  6. C++与Java多态的区别

    多态是指用父指针指向不同子类对象时,调用其共有的函数,不同的子类会有不同的行为.虽然C++和Java都具有多态机制,但是他们的实现不同,使用时的效果也会略有不同. 在C++中 普通函数调用:具体调用哪 ...

  7. MYSQL IN 与 EXISTS 的优化示例

    文章转载自:http://www.jb51.net/article/53127.htm 当B表的数据集必须小于A表的数据集时,用in优于exists,当A表的数据集系小于B表的数据集时,用exists ...

  8. apache http server 局域网无法访问

    apache 本地配置完成测试成功,但局域网内无法访问. 1.主要是本本地的防火墙设置有关,修改防火墙设置就成了 控制面板->系统和安全->Windows 防火墙->允许程序通过Wi ...

  9. WPF 使用定时器

    WPF 使用定时器:<ProgressBar Height="10" HorizontalAlignment="Left" Margin="28 ...

  10. 【WPF学习日记——[DevExpress]】GridControl 行中使用按钮

    想到的办法都试了,只有这个能用,不一定是最好的,但却是自己能想到的,记录一下. <dxg:GridColumn Header="操作" Width="134&quo ...