-
string 클래스카테고리 없음 2013. 3. 2. 14:08반응형
stdfx.h 헤더
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream >
using namespace std;
======================================================#pragma once
class cMyString
{
private:
//< NULL을 제외한 문자열의 길이
int m_nLength;
//< 문자열
char* m_pStr;
public:
//< 생성자
cMyString(void);
//< 인자가 있는 생성자
cMyString( const char* pStr );
//< 복사생성자
cMyString( const cMyString& rhs );
//< 소멸자
~cMyString(void);
//< 길이를 반환
inline unsigned int size( void ) const { return m_nLength; }
inline unsigned int length( void ) const { return m_nLength; }
//< char*를 반환하는 함수
const char* c_str( void ) const { return m_pStr; }
//< 연산자 오버로딩
cMyString& operator=( const char* pStr );
cMyString& operator=( const cMyString& rhs );
cMyString& operator+=( const char* pStr );
cMyString& operator+=( const cMyString& rhs );
cMyString operator+( const char* pStr );
cMyString operator+( const cMyString& rhs );
bool operator==( const char* pStr );
bool operator==( const cMyString& rhs );
char& operator[]( const int nIndex );
const char& operator[]( const int nIndex ) const;
//< 출력또는 입력
friend ostream& operator<<( ostream& os, const cMyString& s )
{
os << s.m_pStr;
return os;
}
friend istream& operator>>( istream& is, cMyString& s )
{
char str[_MAX_FNAME];
is >> str;
s = cMyString(str);
return is;
}
};
======================================#include "StdAfx.h"#include "cMyString.h"//< 디폴트 생성자cMyString::cMyString(void):m_nLength(0),m_pStr(NULL){m_pStr = new char[ 1 ];m_pStr[0] = NULL;}//< 인자가 있는 생성자cMyString::cMyString( const char* pStr ){m_nLength = strlen( pStr );if( m_nLength != 0 ){m_pStr = new char[ m_nLength + 1 ];strcpy_s( m_pStr , m_nLength + 1, pStr );}else{m_pStr = new char[ 1 ];m_pStr[0] = NULL;}}//< 복사생성자cMyString::cMyString( const cMyString& rhs ):m_nLength( rhs.m_nLength ){if( m_nLength != 0 ){m_pStr = new char[ m_nLength + 1 ];strcpy_s( m_pStr , m_nLength + 1, rhs.m_pStr );}else{m_pStr = new char[ 1 ];m_pStr[0] = NULL;}}//< 소멸자cMyString::~cMyString(void){SAFE_DELETE_ARRAY(m_pStr);}//< 연산자 오버로딩cMyString& cMyString::operator=( const char* pStr ){if( pStr != NULL ){//< 기존 버퍼 삭제SAFE_DELETE(m_pStr);m_nLength = strlen( pStr );m_pStr = new char[ m_nLength + 1 ];strcpy_s( m_pStr , m_nLength + 1, pStr );}return *this;}cMyString& cMyString::operator=( const cMyString& rhs ){//< 자신확인if( this == &rhs ){return *this;}//< 기존 버퍼 삭제SAFE_DELETE(m_pStr);m_nLength = rhs.m_nLength;m_pStr = new char[ m_nLength + 1 ];strcpy_s( m_pStr , m_nLength + 1, rhs.m_pStr );return *this;}cMyString& cMyString::operator+=( const char* pStr ){return *this += cMyString(pStr);}cMyString& cMyString::operator+=( const cMyString& rhs ){//< 기존 뒤에 붙이는것 ( 기존 버퍼를 위해 보관 )char* old;old = m_pStr;//< 갯수 증가m_nLength += rhs.m_nLength;m_pStr = new char[ m_nLength + 1 ];//<임시로 저장되었던 문자열 복사strcpy_s( m_pStr ,m_nLength + 1, old);//<새롭게 추가되는 문자열 복사strcat_s( m_pStr ,m_nLength + 1, rhs.m_pStr);//< 기존 버퍼 삭제delete[] old;return *this;}cMyString cMyString::operator+( const char* pStr ){return cMyString();}cMyString cMyString::operator+( const cMyString& rhs ){return cMyString();}bool cMyString::operator==( const char* pStr ){return false;}bool cMyString::operator==( const cMyString& rhs ){return false;}char& cMyString::operator[]( const int nIndex ){return m_pStr[0];}const char& cMyString::operator[]( const int nIndex ) const{return m_pStr[0];}===========================================// 00_MyString.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.//#include "stdafx.h"#include "cMyString.h"int _tmain(int argc, _TCHAR* argv[]){cMyString s("테스트");cMyString t("....");cout << s << endl;cout << s.c_str() << endl;cout << s.length() << endl;cout << s.size() << endl;s += "이런";cout << s << endl;s += t;cout << s << endl;return 0;}반응형