欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

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

来源:本站原创|时间:2020-01-10|栏目: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++类的四大函数(面试常见)的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

上一篇:简单实现C++复数计算器

栏    目:C语言

下一篇:解读堆排序算法及用C++实现基于最大堆的堆排序示例

本文标题:从string类的实现看C++类的四大函数(面试常见)

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/2232.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有