int main()
{
CComponent* pComponent = new CComponent("My Component");
  
        //1. 객체로 인자를 넘길때(1번을 한다면 2번을 주석처리하세요)
        pComponent->AddParameter(CParameter("Test1"));
pComponent->AddParameter(CParameter("Test2"));
pComponent->AddParameter(CParameter("Test3"));
pComponent->AddParameter(CParameter("Test4"));
pComponent->AddParameter(CParameter("Test5"));
pComponent->AddParameter(CParameter("Test6"));
pComponent->AddParameter(CParameter("Test7"));
//////// 

 
       //2. 포인터로 인자를 넘길때(2번을 한다면 1번을 주석처리하세요)
for (int i = 0; i < 6; i++)
{
pComponent->AddParameter(CParameter("Test"));
}
//////// 
int nSize = pComponent -> GetParameterSize();
        for (int i = 0; i < nSize; i++) //객체로 넘길때입니다. 포인터로 넘길시에 "GetParameterAt(i)->"로 변경.
        //아래의 포문도 동일
{
cout << i+1 << " " << pComponent->GetParameterAt(i).GetName() << endl;
}
cout << endl;

cout << "3번째 객체를 삭제합니다" << endl;

pComponent->DeleteParameterAt(3);
cout << endl;
nSize = pComponent -> GetParameterSize();
for (int i = 0; i < nSize; i++)
{
cout << i+1 << " " << pComponent->GetParameterAt(i).GetName() << endl;

}
cout << endl;

delete pComponent;

return 0;
}


헤더파일 분리
Component.h , Parameter.h, BaseEntity.h 로 분리후 Parameter클래스는 BaseEntity클래스를 상속받음.
BaseEntity클래스는 "Test1", "Test2" 같은 문자를 입력받습니다.(멤버변수가 'char* 변수명'임) 
Component클래스는 Parameter객체들을 배열형태로 관리 합니다.

구현해보시고 제가 만든거하고 비교해보세요 

(아래 0- 로 시작하는 과제는 C 표준 함수를 사용하지 않고 포인터 연산을 통해 구현한 버전과 C 표준 함수를 사용한 두 버전을 각각 구현하시오.)

 
========================================================================
0-1. 문자열을 더하는 함수를 작성하시오. 
 
char* GetAppendedString(const char* source, const char* toAppend) {
    ...    
}
 
main(...) {
    cout << GetAppendedString("Hello", "World"); // HelloWorld
}
========================================================================
0-2. 문자열을 비교하는 함수를 작성하시오. 
 
bool IsEqualString(const char* source, const char* target) {
    ...
}
 
main(...) {
    cout << IsEqualString("Hello", "World"); // false
}
========================================================================
0-3. 문자열을 복사하는 함수를 작성하시오. 
char* CopyString(char* dst, const char* src) {
    ...
}
 
main(...) {
    char szValue[80];
    ...
    CopyString(szValue, "HelloWorld");
    cout << szValue; // HelloWorld
}
========================================================================
0-4. 문자열을 특정 문자로 분리하여 배열을 반환하는 함수를 작성하시오.
 
?? Tokenize(char* szValue, char* token, ???) {
    ...
}
 
main(...) {
    char* value = "ABC,DEF,GHI";
    
    ?? = Tokenize(value, ',');
    for (int i = 0; i < ??; i++) {
        cout << ??[i] << endl;
    }
    // ABC
    // DEF
    // GHI
}
========================================================================
 
 
========================================================================
1. 문자열과 숫자를 더하여 문자열을 반환하는 함수를 작성하시오.
 
char* GetNumericAddedString(const char* arg_szValue, int arg_nNum)
{
 
}
========================================================================
2. 문자열에 특정 범위 내의 숫자를 더한 후 배열로 반환하는 함수를 작성하시오.
 
?? GetStringArray(const char* arg_szValue, int arg_nBeginIdx, int arg_nEndIdx)
{
    return ??
}
 
main(...)
{
    ?? pArr = GetStringArray("Test", 0, 7);
    for (int i = 0; i <= 7; i++) {
        cout << pArr[i] << endl;
    }
 
    // Test0, Test1, Test2, ... Test7
}
========================================================================
3. 위 2번에서 반환된 ??의 메모리를 해제하는 코드를 작성하시오.
========================================================================

"pointer"

골때리는 단어다. 사용하기 따라 쉽기도 하면서 어렵다.
시작하는 사람에게는 두려운 단어이며, 아는 사람에게는 고마운 단어일 수도 있다.

포인터를 간단히 말하면,
'가리키는것' 이라고 말할수도 있지만,
그렇게 간단히 말하기엔 쓰이는곳이 너무나 많고 중요하다고 생각한다.

포인터는 기본적으로 모두 4바이트이다.(32비트 기준, 64비트는 두배)
그리고 가리키는것, 즉 어느 집의 주소다.

집이 판자촌이든, 아파트든, 정원딸린주택이든, 주소는 다 똑같은 방식이다.
**시**구**동**번지. 요즘엔 **시**구**로 *** 이런식이다.

즉, 포인터는 이런것들이다.
int* a는 a를 가리키는 int형 포인트이다. a를 가보면 int형이라는 소리.
char* name는 name변수를 가리키는 문자형 포인터이다. name을 가보면 char라는 소리

문제는 포인터 하나 정도는 어느정도 공부하면 대충 감이 온다.

그러나......

더블 포인터라는것이 나올수도 있다.
이는 만들기 나름이다. 이중포인터(더블포인터), 삼중, 사중 만들수는 있다. 삼중부터 잘 안쓰여서 그렇지.

더블 포인터는 어느것을 가리키는 포인터를 가리키는 포인터이다.

말장난 시작됐다.

+ Recent posts