일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 카일레라
- 영어단어게임
- 윈윈전략
- 판매
- 틀린그림 찾기
- 프로그램 개발
- holdem
- 틀린그림찾기
- 고스톱
- MAME
- 맞고
- 게임 외주
- 보드게임
- 프로그램 외주
- Mame32
- 윈윈
- 옥션소송
- 포커
- 카일레라서버
- 포커게임
- 서치아이
- 맞고게임
- 온라인게임
- 영어단어
- 게임 개발
- 상호링크
- 옥션해킹
- 티스토리 초대장
- 써치아이
- 홀뎀
- Today
- Total
kyuseo의 게임 프로그래밍
어느 초심자의 코드를 수정, 지적해 보았습니다. 본문
개요.. |
예전에 프로그래밍을 배우시는 초심자 분으로부터 질문을 받았습니다.
컴파일 오류 관련 질문인데stl 의 string 의 용법을 잘 몰라서 한 실수였습니다.
우선 질문의 정답은
오류코드 : if( strcmp( str, second ) == 0 )
수정코드 : if( strcmp( str.c_str(), second.str.c_str() ) == 0 ) |
하지만 코드를 살피던 도중 너무 큰 문제점들이 보여서 몇몇 오류를 지적해보았습니다.
"백문이 불여일타!!!"이고 모르면 찾아보고 물어보고, 그것이 배우는 지름길임에는 틀림이 없고 질문자의 큰 발전을 이루겠지요.
아래 코드의 주석 내용을 잘 살펴보셔서 조금은 도움이 되시길 기원합니다.
코드 |
#include <iostream> #include <string>
using namespace std;
class _string { public: _string() { // stl의 str은 자체 생성자를 지원하므로 아래 코드는 필요없다. // 즉 군더더기 코드는 코드의 명확성을 상실 시키며 오류의 온상이 될 수 있다. str = ""; }
_string( const string& str ) { // 일반적으로 this 라는 표기는 사용하지 않는다. // 만일 표기할것이라면 print() 등에서는 왜 하지 않는가? this->str = str; }
void print() const { cout << str << endl; }
string GetData() const { return str; }
// 연산자 오버로드의 핵심을 매우 잘못 처리한 매우 잘못된 코드... // 이 코드는 아래와 같은 코드로 바뀌어야한다. /* operator ==( const _string& second ) { if( strcmp( str.c_str(), second.str.c_str() ) == 0 ) cout << " 두 문자열이 같습니다! "<< endl; else cout << " 두 문자열이 다릅니다! "<< endl; } */ //** 수정안 (참고로 일반적으로 이러한 비교연산은 friend함수로 하는것이 일반적임) booloperator ==( const _string& second ) { return( str == second.str ); }
private: string str; };
void main() { _string a; _string b;
a = _string("hello"); b = _string("World!");
a.print(); b.print();
// 이러한 코드는 위에서 지적한대로 아래와 같이 바뀌어야 한다. a==b;
//** 수정안 if( a == b ) cout << " 두 문자열이 같습니다! "<< endl; else cout << " 두 문자열이 다릅니다! "<< endl;
//** 이러한 테스트 프로그램에서는 아래와 같이 추가 테스트가 필수적이다. b = _string("hello");
if( a == b ) cout << " 두 문자열이 같습니다! "<< endl; else cout << " 두 문자열이 다릅니다! "<< endl; } |