String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
生活随笔
收集整理的這篇文章主要介紹了
String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398
題目:編寫類String的構造函數、析構函數和賦值函數,已知類String的原型為:
解答:(1)//普通構造函數
構造函數:構造函數是一種特殊的方法,主要用來在創建對象時初始化對象,即為對象成員變量賦初始值,總與new運算符一起使用在創建對象的語句中,特別的一個類可以有多個構造函數,可根據其參數個數的不同或參數類型的不同來區分它們,即構造函數的重載。 String::String(const char *str) {if(str == NULL){m_data = newchar[1]; *m_data ='\0';}else{int length = strlen(str);m_data = newchar[length+1]; strcpy(m_data,str);} }(2)//拷貝構造函數
拷貝構造函數:拷貝構造函數,是一種特殊的構造函數,它由編譯器調用來完成一些基于同一類的其他對象的構建及初始化。其唯一的參數(對象的引用)是不可變的(const類型)。此函數經常用在函數調用時用戶定義類型的值傳遞及返回。拷貝構造函數要調用基類的拷貝構造函數和成員函數。如果可以的話,它將用常量方式調用,另外,也可以用非常量方式調用。
String::String(const String &other) {int length = strlen(other.m_data);m_data = newchar[length+1]; strcpy(m_data,other.m_data); }(3)// String的析構函數
析構函數:析構函數(destructor) 與構造函數相反,當對象脫離其作用于時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做“清理善后” 的工作(例如在建立對象時用new開辟了一片內存空間,應在退出前在析構函數中用delete釋放)。
String::~String(void) {delete []m_data; // 或deletem_data; }(4)//賦值函數
String & String::operate =(const String&other) // 輸入參數為const型 {if(this == &other) //檢查自賦值return *this;delete []m_data; //釋放原有的內存資源int length = strlen( other.m_data );m_data = newchar[length+1]; //對m_data加NULL 判斷strcpy(m_data, other.m_data );return *this; //返回本對象的引用 }注意:在這個類中包括了指針類成員變量m_data,當類中包括指針類成員變量時,一定要重載其拷貝構造函數、賦值函數和析構函數。
總結
以上是生活随笔為你收集整理的String 的普通构造函数、拷贝构造函数、析构函数、赋值函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: map和vector的迭代器失效问题(某
- 下一篇: 嵌入式软件工程师经典笔试题