C++学习笔记
提示:本笔记是个人学习侯捷C++课程的总结笔记,欢迎来信指正批评!
第一篇 拷贝构造、拷贝赋值、析构
第二篇 堆、栈与内存管理
第三篇 编写String类
提示:以下是本篇文章正文内容,下面案例可供参考
写个String类示例
mystring.cpp
/*防卫式声明,回见第一篇*/
#ifndef __STRING__
#define __STRING__
class String
{
public:
/*构造函数*/
String(const char* cstr = 0);
/*拷贝构造*/
String(const String& str);
/*赋值拷贝*/
String& operator = (const String& str);
/*析构函数*/
~String();
char* get_c_str() const {return m_data;}
private:
char* m_data;
}
构造函数
/*构造函数不需要返回类型*/
inline String::String(const char* cstr=0)
{
/*如果指针不为空,将char*指针值赋值到String的data*/
if(cstr){
m_data=new char[strlen(cstr)+1];
strcpy(m_data,cstr);
}
/*未指定初值情况*/
else{
m_data = new char[1];
*m_data = '\0';
}
}
析构函数
inline String::~String()
{
delete[] m_data;
}
拷贝构造
/*拷贝构造依然是构造函数,没有返回类型*/
inline String::String(const String& str)
{
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
拷贝赋值
/*考虑到连串赋值,返回类型不能写成viod,需写成String&*/
inline String& String::operator=(const String str)
{
/*判断是否是自我赋值*/
if(this==&str)
return *this;
delete[] m_data;
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
return *this;
}
String&中的&是引用,&str是取地址。