'); }
'); }
.cpp파일로
1단계 :
#include <stdio.h>
typedef struct _sData
{
int num ;
char str[100] ;
} sData ;
void init(sData *pm, char *pstr) ;
void add(sData *pm, char *pstr) ;
void out(sData *pm) ;
void add_int(sData *pm, int num) ;
int number(sData *pm) ;
void array(sData *pm) ;
int check(sData *pm, char ch) ;
void sub(sData *pm, char ch) ;
void main()
{
sData data = { 0, "\0" } ;
sData obj = { 0, "\0" } ;
int k ;
printf("[ Data fun ]\n") ;
init(&data, "CArA") ;
add(&data, "a7A") ; out(&data) ;
k = number(&data) ; printf("k : [ %d ]\n", k) ;
array(&data) ; out(&data) ;
printf("[ Num : 701450 ]\n") ;
add_int(&data, 701450) ; out(&data) ;
k = check(&data, 'A') ; printf("k : [ %d ]\n", k) ;
sub(&data, 'A') ; out(&data) ;
printf("\n\n[ Obj fun ]\n") ;
init(&obj, "Ellias") ; out(&obj) ;
}
int check(sData *pm, char ch)
{
int u, d ;
for(u=0, d=0 ; pm->str[u] !='\0' ;u++)
if(pm->str[u] == ch)
d++ ;
return d ;
}
void sub(sData *pm, char ch)
{
int u, d ;
for(u=0, d=0 ; pm->str[u]!='\0' ; u++, d++)
((pm->str[u]==ch)?(d--):(pm->str[d]=pm->str[u])) ;
pm->str[d]='\0' ;
pm->num=d ;
}
void add_int(sData *pm, int num)
{
int n = num ;
while(num>10) {
int u ;
for(u=1 ; n>10 ; n=n/10, u = u*10) ;
pm->str[pm->num++] = n + '0' ;
num = num - n*u ;
if((!((u/10 <= num) && (num < u)))&&((num!=0)))
pm->str[pm->num++] = '0' ;
n = num ;
}
pm->str[pm->num++] = num + '0';
pm->str[pm->num] = '\0' ;
}
int number(sData *pm)
{
int u, d ;
for(u=0, d=0 ; u<pm->num ; u++)
if(('0'<=pm->str[u])&&(pm->str[u]<='9'))
d = d * 10 + (pm->str[u]-'0') ;
return d ;
}
void array(sData *pm)
{
char temp ;
int u ;
for(u=0 ; u<pm->num-1 ; u++) {
int d ;
for(d=1 ; d<pm->num-u ; d++)
if(pm->str[d-1] > pm->str[d]) {
temp = pm->str[d-1] ;
pm->str[d-1] = pm->str[d] ;
pm->str[d] = temp ;
}
}
}
void init(sData *pm, char *pstr)
{
int u ;
for(u=0 ; pstr[u]!='\0' ; pm->str[u]=pstr[u++]) ;
pm->str[u]='\0' ;
pm->num=u ;
}
void add(sData *pm, char *pstr)
{
int u, n ;
for(u=0, n=pm->num ; pstr[u]!='\0' ; u++, n++)
pm->str[n]=pstr[u] ;
pm->str[n]='\0' ;
pm->num=n ;
}
void out(sData *pm)
{
printf("[ Num ] : %d\t[ Str ] : %s\n", pm->num, pm->str) ;
}
2단계 :
C++의 구조체에는 함수를 포함할 수 있으므로 함수를 구조체 안에 넣었음
그리고 scope연산자를 이용해서 함수들의 scope를 sData로 지정
void sData::init(char *pstr)을 compiler는 void sData::init(sData * this, char *pstr)로 인식한다.
m.init("ABC")를 실제로 compiler는 m.init(&m, "ABC")로 인식
#include <stdio.h>
typedef struct _sData
{
int num ;
char str[100] ;
void init(char *pstr) ;
void add(char *pstr) ;
void out() ;
void add_int(int num) ;
int number() ;
void array() ;
int check(char ch) ;
void sub(char ch) ;
} sData ;
void main()
{
sData m = { 0, "\0" } ;
sData n = { 0, "\0" } ;
int k ;
printf("[ Data fun ]\n") ;
m.init("CArA") ;
m.add("a7A") ; m.out() ;
k = m.number() ; printf("k : [ %d ]\n", k) ;
m.array() ; m.out() ;
printf("[ Num : 701450 ]\n") ;
m.add_int(701450) ; m.out() ;
k = m.check('A') ; printf("k : [ %d ]\n", k) ;
m.sub('A') ; m.out() ;
printf("\n\n[ Obj fun ]\n") ;
n.init("Ellias") ; n.out() ;
}
int sData::check(char ch)
{
int u, d ;
for(u=0, d=0 ; str[u] !='\0' ;u++)
if(str[u] == ch)
d++ ;
return d ;
}
void sData::sub(char ch)
{
int u, d ;
for(u=0, d=0 ; str[u]!='\0' ; u++, d++)
((str[u]==ch)?(d--):(str[d]=str[u])) ;
str[d]='\0' ;
num=d ;
}
void sData::add_int(int num)
{
int n = num ;
while(num>10) {
int u ;
for(u=1 ; n>10 ; n=n/10, u = u*10) ;
str[this->num++] = n + '0' ;
num = num - n*u ;
if((!((u/10 <= num) && (num < u)))&&((num!=0)))
str[this->num++] = '0' ;
n = num ;
}
str[this->num++] = num + '0';
str[this->num] = '\0' ;
}
int sData::number()
{
int u, d ;
for(u=0, d=0 ; u<num ; u++)
if(('0'<=str[u])&&(str[u]<='9'))
d = d * 10 + (str[u]-'0') ;
return d ;
}
void sData::array()
{
char temp ;
int u ;
for(u=0 ; u<num-1 ; u++) {
int d ;
for(d=1 ; d<num-u ; d++)
if(str[d-1] > str[d]) {
temp = str[d-1] ;
str[d-1] = str[d] ;
str[d] = temp ;
}
}
}
void sData::init(char *pstr)
{
int u ;
for(u=0 ; pstr[u]!='\0' ; str[u]=pstr[u++]) ;
str[u]='\0' ;
num=u ;
}
void sData::add(char *pstr)
{
int u, n ;
for(u=0, n=num ; pstr[u]!='\0' ; u++, n++)
str[n]=pstr[u] ;
str[n]='\0' ;
num=n ;
}
void sData::out()
{
printf("[ Num ] : %d\t[ Str ] : %s\n", num, str) ;
}
3단계 :
기본성격이 public인 struct에서는 수납된 data의 접근을 막을 방법이 없음
data의 접근을 제한할 수 있는 class로 바꿔주겠음
#include <stdio.h>
class sData
{
protected :
int num ;
char str[100] ;
public:
void init(char *pstr) ;
void add(char *pstr) ;
void out() ;
void add_int(int num) ;
int number() ;
void array() ;
int check(char ch) ;
void sub(char ch) ;
};
void main()
{
sData m;
sData n;
int k ;
printf("[ Data fun ]\n") ;
m.init("CArA") ;
m.add("a7A") ; m.out() ;
k = m.number() ; printf("k : [ %d ]\n", k) ;
m.array() ; m.out() ;
printf("[ Num : 701450 ]\n") ;
m.add_int(701450) ; m.out() ;
k = m.check('A') ; printf("k : [ %d ]\n", k) ;
m.sub('A') ; m.out() ;
printf("\n\n[ Obj fun ]\n") ;
n.init("Ellias") ; n.out() ;
}
4단계 :
이제부터는 class설계 잘하면 된다 ㅎ
C++의 기능들 잘 활용해가면서 ㅎ
'Tech & IT > 프로그래밍' 카테고리의 다른 글
operator = 을 재구현할 때 참조형 반환타입을 선언할 후 있는 이유 (0) | 2009.12.10 |
---|---|
C++과 C가 섞여있을 경우 C 함수를 위해 extern "C" 사용 (0) | 2009.12.10 |
Layer를 다루는 C프로그래밍으로 단계별 개선 (0) | 2009.12.10 |
C++에서 this에 대해 알아보자 (0) | 2009.12.10 |
functor를 이용한 함수 매크로 (0) | 2009.12.09 |