国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

從string類的實現看C++類的四大函數(面試常見)

2020-05-23 14:02:46
字體:
來源:轉載
供稿:網友
C++類一般包括構造函數、拷貝構造函數、析構函數和賦值函數四大函數,非常常見,本文給大家介紹從string類的實現看C++類的四大函數,一起看看吧
 

朋友面試的一道面試題,分享給大家,面試官經常會問到的,實現string類的四大基本函數必掌握。

一個C++類一般至少有四大函數,即構造函數、拷貝構造函數、析構函數和賦值函數,一般系統都會默認。但是往往系統默認的并不是我們所期望的,為此我們就有必要自己創造他們。在創造之前必須了解他們的作用和意義,做到有的放矢才能寫出有效的函數。

 #include <iostream> class CString {   friend std::ostream & operator<<(std::ostream &, CString &);   public:     // 無參數的構造函數     CString();     // 帶參數的構造函數     CString(char *pStr);     // 拷貝構造函數     CString(const CString &sStr);     // 析構函數     ~CString();     // 賦值運算符重載     CString & operator=(const CString & sStr);   private:     char *m_pContent; }; inline CString::CString() {   printf("NULL/n");   m_pContent = NULL;  m_pContent = new char[1];  m_pContent[0] = '/0'; } inline CString::CString(char *pStr) {   printf("use value Contru/n");   m_pContent = new char[strlen(pStr) + 1];   strcpy(m_pContent, pStr); } inline CString::CString(const CString &sStr) {   printf("use copy Contru/n");   if(sStr.m_pContent == NULL)     m_pContent == NULL;   else   {     m_pContent = new char[strlen(sStr.m_pContent) + 1];     strcpy(m_pContent, sStr.m_pContent);   } } inline CString::~CString() {   printf("use ~ /n");   if(m_pContent != NULL)     delete [] m_pContent; } inline CString & CString::operator = (const CString &sStr) {   printf("use operator = /n");   if(this == &sStr)     return *this;   // 順序很重要,為了防止內存申請失敗后,m_pContent為NULL  char *pTempStr = new char[strlen(sStr.m_pContent) + 1];   delete [] m_pContent;   m_pContent = NULL;   m_pContent = pTempStr;   strcpy(m_pContent, sStr.m_pContent);   return *this; } std::ostream & operator<<(std::ostream &os, CString & str) {   os<<str.m_pContent;   return os; } int main() {  CString str3; // 調用無參數的構造函數   CString str = "My CString!"; // 聲明字符串,相當于調用構造函數  std::cout<<str<<std::endl;   CString str2 = str; // 聲明字符串,相當于調用構造函數   std::cout<<str2<<std::endl;   str2 = str;  // 調用重載的賦值運算符  std::cout<<str2<<std::endl;   return 0; } 

輸出:

NULL
use value Contru
My CString!
use copy Contru
My CString!
use operator =
My CString!
use ~
use ~
use ~

以上所述是小編給大家介紹的從string類的實現看C++類的四大函數(面試常見)的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大石桥市| 沙坪坝区| 融水| 玉田县| 清丰县| 天津市| 日喀则市| 明溪县| 云浮市| 福贡县| 昂仁县| 舟山市| 日照市| 雷波县| 遵义市| 若羌县| 吴江市| 柳林县| 武安市| 曲周县| 和平区| 陆河县| 太康县| 永安市| 大理市| 济源市| 黎城县| 天峻县| 宁波市| 东方市| 呼图壁县| 金乡县| 西藏| 晋州市| 龙川县| 临安市| 东安县| 福海县| 崇仁县| 武山县| 招远市|