小和尚上山去拜師-面試題_實現string()拷貝建構函式
*通過實現拷貝建構函式對理解c++初始化類物件很有幫助*/ class String { public: String(const char *str=NULL); //含引數的構造 String(const String &other); //複製構造 String& operator=(const String &other); //賦值構造 private: char *m_data; }; //含引數的構造 String::String(const char *str) { if (str==NULL) { //指標字串為空 申請一個字元空間儲存'\0' m_data=new char[1]; m_data[0]='\0'; }else { int len=strlen(str); m_data=new char[len+1]; //由於strlen()函式獲取的不包含最後一個‘\0’所以要加一 strcpy(m_data,str); } } //複製建構函式 String::String(const String &other) { // int len=strlen(other.m_data); m_data=new char[len+1]; strcpy(m_data,other.m_data); } //賦值構造 String & String::operator =(const String &other) { if (&other!=this) //防止自我賦值 { if (m_data!=NULL) //可有可無,實現最好 { delete []m_data; //[] 注意這個的作用 m_data=NULL; //在這裡為什莫要把被賦值的變數確保刪除,如果不刪除會出現什莫問題? } int len=strlen(other.m_data); m_data=new char[len+1]; strcpy(m_data,other.m_data); } return *this; } //解構函式 String::~String(void) { if (m_data!=NULL) { delete []m_data; m_data=NULL; } }
相關推薦
小和尚上山去拜師-面試題_實現string()拷貝建構函式
*通過實現拷貝建構函式對理解c++初始化類物件很有幫助*/ class String { public: String(const char *str=NULL); //含引數的構造
面試題14——談談對拷貝建構函式和賦值運算子的認識
拷貝建構函式和賦值運算子過載有以下兩個不同之處: (1)拷貝建構函式生成新的類物件,賦值運算子不能; (2)由於拷貝建構函式是直接構造一個新的類物件,所以在初始化這個物件之前不需要檢測原物件是否和新建物件相同,而賦值運算子則需要這個操作,另外賦值運算中如果原來的物件中有記憶體分配要先把記憶體
面試題_抽象類和介面的區別
含有abstract修飾符的class 即為抽象類。abstract類不能建立例項物件;含有abstract的方法的類必須定義為abstract class ;abstract class 裡的方法不必是抽象的;抽象類中定義抽象方法必須放在具體子類中實現;所以呀,不能有抽象的
面試題_平安,大廈,湖濱路,一,賬通
20180822上海平安一賬通的專案面試題回憶 1畫出你做的系統的體系圖or結構圖 2樂觀鎖和悲觀鎖的意思,怎麼實現 3.多執行緒的實現方法有哪些,多執行緒的各種狀態以及他們之間怎麼變化的。特別是如何才能中止多執行緒 4集合類具體有哪些實現,越詳細越好,以及裡面
小和尚上山學習之智慧指標(六)--boost::weak_ptr
boost::weak_ptr 屬於 boost 庫,定義在 namespace boost 中,包含標頭檔案 #include<boost/smart_ptr.hpp> 便可以使用。在講 boost::weak_ptr 之前,讓我們先回顧一下前面講解的內容。似乎
【面試題】實現一個棧,要求Push(入棧),Pop(出棧),Min(返回最小值的操作)的時間複雜度為O(1)
問題描述:實現一個棧,要求Push(入棧),Pop(出棧),Min(返回最小值的操作)的時間複雜度為O(1) 分析問題:要記錄從當前棧頂到棧底元素的最小值,很容易想到用一個變數,每push一個元素更新一次變數的值。那麼問題來了,當執行pop操作時,上一次的最小值就找不到
小和尚上山學習之智慧指標(二)--boost::scoped_ptr
boost::scoped_ptr:屬於 boost 庫,定義在 namespace boost 中,包含標頭檔案 #include<boost/smart_ptr.hpp> 便可以使用。boost::scoped_ptr 跟 std::auto_ptr 一樣,可
黑馬程式設計師_7K面試題_交通燈管理系統
-面向物件分析設計經驗:誰用於資料,誰就對外提供操作這些資料的方法。 典型案例: 人在黑板上畫圓。 分析: 共有三個物件:人、黑板、圓。動作:畫 畫圓需要圓心和半徑,圓心和半徑都是圓的屬性上,圓擁有資料,所以圓物件提供畫圓的方法 圓在黑板上,黑板擁有
棧和隊列的面試題Java實現
size article static row ray exce public http queue 參看博客:http://www.imooc.com/article/1515 但是代碼在兩個隊列實現一個棧的時候代碼存在問題 正確代碼如下: import java.ut
面試題:ConcurrentHashMap實現線程安全的原理
tab 其它 安全 segment nth htable 一個 需要 鎖定 在ConcurrentHashMap沒有出現以前,jdk使用hashtable來實現線程安全,但是hashtable是將整個hash表鎖住,所以效率很低下。 ConcurrentHashMap將數據
【劍指offer】面試題 2. 實現 Singleton模式
模式 試題 枚舉 生成 test hand true 方法 單例模式 面試題 2. 實現 Singleton模式 題目:設計一個類,我們只能生成該類的一個實例。 單例模式:確保一個類只有一個實例,並提供了一個全局訪問點。 Code 1.餓漢模式 //餓漢模式 publ
程式設計師面試題(C++ 實現) - Day1
文章目錄 說明 題目一覽 1. 二維陣列中的查詢 2. 替換空格 3. 從尾到頭列印連結串列 4. 重建二叉樹 5. 用兩個棧實現佇列 聯絡博主
程式設計師面試題(C++ 實現) - Day2
文章目錄 說明 今日題目一覽 1. 旋轉陣列中的最小數字 2. 斐波那契數列 3. 跳臺階(變態跳臺階) 4. 矩形覆蓋 5. 二進位制中 1 的個數 聯絡博主
劍指offer-面試題1:賦值運算子函式
如下為型別CMyString的宣告,請為該型別新增賦值運算子函式。 解析:給一個類進行運算子過載。 關鍵部分程式碼: CMyString& CMyString::operator =(const CMyString &str) { if(this == &str)
Hive面試題:hive有哪些udf函式,作用
UDF(user-defined function)作用於單個數據行,產生一個數據行作為輸出。(數學函式,字串函式) UDAF(使用者定義聚集函式 User- Defined Aggregation Funcation):接收多個輸入資料行,併產生一個輸出資料行。(count,max)
《劍指Offer》面試題1:賦值運算子函式
// 面試題1:賦值運算子函式 // 題目:如下為型別CMyString的宣告,請為該型別新增賦值運算子函式。 class CMyString { public: CMyString(char* pData = nullptr);
程式設計師面試題(C++ 實現)
說明 以下題目均來自於牛客網 以下程式碼用 C++11 編寫 以下程式碼均已編譯通過(Compile by MINGW) 以下程式碼均有測試案例(Main function) 以下程式碼均已進行優化或部分優化(Optimize) 以下程式碼均有註釋(Com
[C/C++筆試面試題] 程式設計基礎 - 位操作、函式、陣列篇
7 位操作 二進位制是現代計算機發展的基礎,所有的程式程式碼都需要轉換成最終的二進位制程式碼才能執 行。合理地進行二進位制的位操作,對於編寫優質程式碼,特別是嵌入式應用軟體開發非常關鍵。 7.1 一些結構宣告中的冒號和數字是什麼意思? c語言的結構體可以實現位段,它的定義形式是在一個定義的結構體成員後面
有關遞迴演算法的面試題java實現
什麼叫遞迴? 遞迴是方法(函式)呼叫方法本身的一種程式設計技巧; 使用遞迴需要滿足2個條件: 1)有反覆執行的過程(呼叫自身) 2)有跳出反覆執行過程的條件(遞迴出口) 遞迴演算法的應
面試題 模擬實現strlen函式的3種方法。
第一種方法是用計數器模擬實現strlen函式。#include<stdio.h> #include<assert.h> int my_strlen(const char *str) { int count = 0; assert(str!=NUL