c+String 클래스 코드 인 스 턴 스 작성

2406 단어 c + +String
본 논문 의 사례 는 c+String 류 의 구체 적 인 코드 를 공유 하여 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.

class String
{
public:
  String(const char* = nullptr); //      
  String(const String& other);  //      
  ~String(void); //    
  String& operator = (const String& other);  //    
  
private:
  char* m_data;
};
 
//      
String::String(const char* str)
{
  if(str == nullptr){
    m_data = new char[1];  //              '\0'  
    *m_data = '\0';
  }else{
    m_data = new char[strlen(str) + 1];  //+1           '\0'
    strcpy(m_data, str);
  }
}
 
//      
String::String(const String& other)
{
  if(other == nullptr){
    m_data = nullptr;
  }else{
    //          other.m_data
    m_data = new char[strlen(other.m_data) + 1];
    strcpy(m_data, other.m_data);
  }
}
 
//    
String::~String(void)
{
  if(m_data != nullptr){
    delete [] m_data;
    m_data = nullptr;
  }
}
 
//     
String& String::operator=(const String& other)
{
  //          
  if(this != other){
    delete [] m_data;  //         
    if(other == nullptr){
      m_data = nullptr;
    }else{ 
      m_data = new char[strlen(other.m_data) + 1];
      strcpy(m_data, other.m_data);
    }
  }
  return *this;
}
나머지 두 개 는 과부하+번호 와=번호 입 니 다.

String& operator + (String& other)
{
  char* tmp = m_data;
  m_data = new char[strlen(m_data) + strlen(other.m_data) + 1];
  strcpy(m_data, tmp);  //        
  strcpy(m_data, other.m_data);  //        
  delete [] tmp; //        
  return *this;
}
 
String& operator = (String& other)
{
  if(this = other){
    return *this;
  }
  if(m_data != nullptr){
    delete [] m_data;  //        
  }
  m_data = new char [strlen(other.m_data) + 1];
  strcpy(m_data, other.m_data);
  return *this;
}
 
위 에서 말 한 것 은 소 편 이 소개 한 c+String 류 의 상세 한 통합 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기