C++自實現string

來源:互聯網
上載者:User
要求自實現string的基本函數,建構函式,解構函式等,緣分呐,不得不認真對待一下,回來仔細查了下,總結一下:C++實現的代碼

#include<iostream.h>
class string{
public:
string(const char*str=NULL);//注意指標常量和常量指標的區別,const在前表示是常量(指標)而不

//是指標常量
string(const string&other);
~string();
string&operator=(const string & other);
void print()
{
cout<<m_data<<endl;
}
private:
char*m_data;
};
string::string(const char*str){//注意在類外實現成員函數時的表達方式
const char*p=str;//只能用一個常量指標變數來指向常量指標變數,而不能用一般的指標變數來指向一個常量指標
while(*p!='\0')p++;
m_data=new char[p-str+1];//在開闢儲存空間時,原則上也可以用一個char*指標指向字串(數組),但這樣做是很危險的,因為字元指標可能會指向不可知的位置,所以我們在為m_data申請空間的時候是以數組的方式申請而不是用new char,注意要為串結束符\0申請空間。
//m_data=new char;
char*q=m_data;
while(*str){*q++=*str++;}
*q='\0';//一定要記得加串結束符
}
string::string(const string&other){
char*q=other.m_data;
while(*q++);
m_data=new char[q-other.m_data+1];
char*p=m_data;
char*r=other.m_data;//

while(*p++=*r++);

}
string::~string(){
if(m_data)
delete[] m_data;//釋放字元數組
}
string& string::operator=(const string&other)
{

//拷貝建構函式在返回時需要返回一個有效引用,不能返回對一個局部變數的引用
if(m_data) delete[] m_data;//先釋放掉以前的記憶體
if(other.m_data)
{
char*q=other.m_data;
while(*q++);
m_data=new char[q-other.m_data+1];
char*p=m_data;
char*r=other.m_data;//

while(*p++=*r++);

}
else m_data=NULL;
return *this;//返回當前對象
}
void main()
{
string s("dhhh");
s.print();
string s1(s);
s1.print();
string s2=s;
s2.print();
return;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.