ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++面试题string类的具体实现

2020-06-16 15:06:22  阅读:243  来源: 互联网

标签:面试题 const string c++ ostream operator include class


 1 #include<iostream>
 2 //#include<ostream>
 3 //class ostream;
 4 class string
 5 {
 6 public:
 7     //constructor
 8     string(const char* str=nullptr);
 9     //copy constructor
10     string(const string&);
11     //assign operator
12     string& operator=(const string& rhs);
13     //deconstructor
14     ~string();
15     
16     friend std::ostream& operator<<(std::ostream & os, string &str);    //友元函数可以访问私有成员
17 private:
18     char* m_data;
19 };
20 //构造函数的实现
21 string::string(const char* str)
22 {
23     std::cout << "构造函数被调用\n";
24     if (nullptr == str) {
25         m_data = new char[1];
26         m_data[0] = '\0';
27     }
28     else
29     {
30         m_data = new char[strlen(str) + 1];
31         strcpy(m_data, str);
32     }
33 }
34 //拷贝构造函数的实现
35 string::string(const string& another) {
36     std::cout << "拷贝构造函数被调用:\n";
37     m_data = new char[strlen(another.m_data) + 1];
38     strcpy(m_data, another.m_data);
39 }
40 // 赋值运算
41 string& string::operator=(const string& rhs) {
42     std::cout << "赋值运算符被调用:\n";
43     if (this == &rhs) return *this;
44     delete[]m_data;
45     m_data = new char[strlen(rhs.m_data) + 1];
46     strcpy(m_data, rhs.m_data);
47     return *this;
48 }
49 string::~string()
50 {
51     std::cout << "析构函数被调用:\n";
52     delete[]m_data;
53     m_data = nullptr;
54 }
55 std::ostream& operator<<(std::ostream & os, string& str) {
56     os << str.m_data;
57     return os;
58 }
59 int main() {
60     string str1("jibisheng");
61     string str2("zhangjie");
62     string str3(str1);
63     string str4;
64     str4 = str3;
65     std::cout << str1 << "\n"<<str2<<std::endl<<str3<<std::endl<<str4<<std::endl;
66     return 0;    
67 }

 

标签:面试题,const,string,c++,ostream,operator,include,class
来源: https://www.cnblogs.com/jibisheng/p/13140984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有