源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

从string类的实现看C++类的四大函数(面试常见)

  • 时间:2022-04-09 16:34 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:从string类的实现看C++类的四大函数(面试常见)
朋友面试的一道面试题,分享给大家,面试官经常会问到的,实现string类的四大基本函数必掌握。 一个C++类一般至少有四大函数[b],即构造函数、拷贝构造函数、析构函数和赋值函数[/b],一般系统都会默认。但是往往系统默认的并不是我们所期望的,为此我们就有必要自己创造他们。在创造之前必须了解他们的作用和意义,做到有的放矢才能写出有效的函数。
 #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++类的四大函数(面试常见)的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部