C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[847] LowerString / UpperString 기본자료형
김태선 [cppbuilder] 7118 읽음    2009-01-24 07:39
델마당에 누군가  델파이에 LowerString / UpperString가 있으면 하는 글이 있길레
재미로 만들어 봤습니다. 델파이는 클래스 구조 문제 때문에 이런식의 기본 자료형으로
만드는 것은 불가능합니다. 하지만 보다 객체지향적인 C++에서는 가능하죠.
단순히 LowerString / UpperString이 아니라, 기존 AnsiString의 아주 약간의 불편도 개선한 것입니다.

실무에 쓸일은 없겠지만... 걍 재미로 한번 보세요.


//---------------------------------------------------------------------------
// LowerString / UpperString
//
// 아래는 루틴 이해에 도움이 되는 글:
//  C++빌더의 훌륭한 스트링 클래스 String은 char* 가 요구되는 곳에
//    stirng.c_str() 와 같이 c_str() 메소드를 사용해야 합니다.
//  조금 귀잖습니다.
//  그래서 String 과 같으면서 c_str() 메소드를 사용할 필요가 없이
//  자동으로 형변환이 되어 들어가는 스트링 클래스를 만들어 봤습니다.
//  String 과 char* 의 장점을 동시에 쓸수 있게 하는 것입니다.
//  원래 String 클래스를 상속받아 여기에 기능을 수정하면 간단한데,
//  String 클래스는 상속이 안됩니다. 그래서 간단한 레퍼 클래스인
//  크로스스트링 클래스를 만들었는데, 기본 문자열 스트링과 거의 사용법이 같습니다.
//  래퍼클래스로 약간의 사용법상 차이 외는 모든 것이 같습니다.
//
//
// 재미로 만든 이 : 김태성

class LowerString
{
private:
    String    str;

public:
    LowerString()
    {
    }
    LowerString(char* s)
    {
        str = LowerCase(s);
    }
    LowerString(String& s)
    {
        str = s.LowerCase();
    }
    // String 이 쓰이는 곳에 바로 강제 형변환없이 사용하게 한다.
    operator String()
    {
        return str.LowerCase();
    }
    // char* 가 쓰이는 곳에 바로 강제 형변환없이 사용하게 한다.
    operator char*()
    {
        return str.LowerCase().c_str();
    }
    // 스트링 클래스 메소드를 직접 사용할때.
    String* operator ->()
    {
        return &str.LowerCase();;
    }
    // 이것은 형을 String형으로 명확하게 하는 * 연산자.
    String& operator *()
    {
        return str.LowerCase();;
    }
};

class UpperString
{
private:
    String    str;

public:
    UpperString()
    {
    }
    UpperString(char* s)
    {
        str = UpperCase(s);
    }
    UpperString(String& s)
    {
        str = s.UpperCase();
    }
    // String 이 쓰이는 곳에 바로 강제 형변환없이 사용하게 한다.
    operator String()
    {
        return str.UpperCase();
    }
    // char* 가 쓰이는 곳에 바로 강제 형변환없이 사용하게 한다.
    operator char*()
    {
        return str.UpperCase().c_str();
    }
    // 스트링 클래스 메소드를 직접 사용할때.
    String* operator ->()
    {
        return &str.UpperCase();;
    }
    // 이것은 형을 String형으로 명확하게 하는 * 연산자.
    String& operator *()
    {
        return str.UpperCase();;
    }
};
//---------------------------------------------------------------------------




테스트

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    String  str = "Turbo Delphi + Turbo C++ = Very Good !";
    LowerString lowerstr = str;
    UpperString upperstr = str;
    ShowMessage(str + "\n\n" + lowerstr + "\n\n" + upperstr);
}
//---------------------------------------------------------------------------

이 자료형에 부분 대입하거나 char로 값을 수정하면
대소문자 무시하고 그냥 입력한 값 그대로 들어갑니다.
하지만 쓰려고 str 값을 보면 어느새 대소문자로 일정하게 바뀌어 있죠.
좀 더 손을 보면 보다 완전하게 조정할 수 있지만 그런 것은 실무에 필요할때 작업하고
지금은 그냥 패스~


그럼.

+ -

관련 글 리스트
847 LowerString / UpperString 기본자료형 김태선 7118 2009/01/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.