델마당에 누군가 델파이에 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 값을 보면 어느새 대소문자로 일정하게 바뀌어 있죠.
좀 더 손을 보면 보다 완전하게 조정할 수 있지만 그런 것은 실무에 필요할때 작업하고
지금은 그냥 패스~
그럼.
|