首页 > C++ > 正文 含指针的类 浏览 1170 · 点赞 1 · 1年前 (2023-10-12) C++含指针的类 x1#ifndef _MYSTRING_2#define _MYSTRIGN_3#include <string.h>4//只要类里含有指针,那就不能用编译器的默认拷贝构造函数和拷贝赋值函数(编译器的是很忠实的5//一个bit一个bit的copy,如果是指针,它只复制了指针的地址),01中complex类没有,所以用了默认的6class String7{8private:9 /* data */10 char* m_data;//只有用指针,才能符合string在实际使用中可变的长度11public:12 String(/* args */const char* cstr = 0);//构造函数13 //只要类内含有指针,则必然重写下面这三个函数,西方称为Big Three,三个特殊函数14 String(const String& str);//拷贝构造函数,自己写就写成深拷贝,编译器默认的是浅拷贝,它只复制了地址15 String& operator=(const String& str);//拷贝赋值函数16 17 ~String();//析构函数18 19 char* get_c_str() const {return m_data;}20};21inline//建议编译器把它作为内联函数,实际作不作只有编译器知道22String::String(/* args */const char* cstr)//构造函数23{24 if(cstr){//判断指针是指向0的吗25 m_data = new char[strlen(cstr)+1];26 strcpy(m_data,cstr);27 }28 else{29 m_data = new char[1];30 *m_data = '\0';31 }32}33inline34String::String(const String& str)//拷贝构造函数,自己写就写成深拷贝,编译器默认的是浅拷贝,它只复制了地址35{36 m_data = new char[strlen(str.m_data)+1];37 strcpy(m_data,str.m_data);38}39inline40String& String::operator=(const String& str)//拷贝赋值函数41{42 if(this == &str)//检测自我赋值,即自己等于自己43 {44 return *this;45 }46 //上边那个判断语句要功力深厚的人才能写出来。47 delete[] m_data;48 m_data = new char[strlen(str.m_data) + 1];49 strcpy(m_data,str.m_data);50 return *this;51}52String::~String()53{54 delete[] m_data;55}56 57//输出操作符重载,这个不可以是成员函数,则使用时只能写成c1<<cout,和习惯用法相反58#include <iostream>59using namespace std;60 61ostream&//返回ostream&的目的,是为了用户可以连续输出,比如:cout<<c1<<c2<<endl;62 //如果不考虑连续输出,这个函数就可以不要返回值。63operator <<(ostream& os,const String& str)//这儿前一个参数不能加const,因为return中相当于改了os的状态64{65 os << str.get_c_str();66 return os ;67}68#endif69 C++ 已有1人点赞 打赏一下作者 上一篇 普通类 下一篇 FANUC数控系统数据采集记录 猜你喜欢 普通类 类使用空间说明 构造函数