void plus(char* a, char* b, char*& sum)
{
sum = strcat(a, b);
}

int main()
{
        char a[100] = { '\0' };
strcpy(a, "Hello ");

char* sum = 0;

plus(a, "World!", sum);

cout << sum << endl; 



출력 >> Hello World!


이건 call-by-value일까요 call-by-reference일까요?


ps. call-by-address보다는 주소값을 이용한 call-by-reference가 맞는것 같습니다.... 

(아래 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번에서 반환된 ??의 메모리를 해제하는 코드를 작성하시오.
========================================================================
아래와 같은 상속구조를 갖는 클래스들을 정의하고 이들의 업무를 관리하는 근로자센터 클래스를 구현하시오

           사람
             |
          근로자
===================
|           |             |
군인    의사       개발자

1. 사람 : 이름, 나이를 속성으로 포함

2. 근로자 : 근무지를 속성으로 포함. 업무를 행위로 포함( DoWork() 함수를 정의)

3. 군인 : 병과 (육군/해군/공군)을 속성으로 포함. 행위 수행시 " ~~ 근무지에서 ~~ 병과로 나라를 지키다"
4. 의사 : 전공(내과/외과 등)을 속성으로 포함. 행위 수행시 "~~ 근무지에서 ~~ 전공으로 환자를 치료하다"
5. 개발자 : 기술(C++/JAVA 등)을 속성으로 포함. 행위 수행시 "~ 근무지에서 ~ 기술로 개발을 하다."

[제약사항]
1. 사람과 근로자는 개별로 생성할 수 없다.
2, 근로자 센터는 군인, 의사, 개발자 드으이 객체들을 리스트 형태로 관리하며, 기본적으로 Add(...), DoWorkAll(...)함수를 정의해야 한다.


main()
{
WorkerCerter* pCenter = new WorkerCenter();

~~ pDoctor = new Doctor("Kim", 25, "인천" , "내과");
~~ pSoldier = new Soldier("Lee" , 30, "서울", "육군");
~~ pDeveloper = new Developer("Hong", 19, "부산", "C++");

pCenter->Add(pDoctor);
pCenter->Add(pSoldier);
pCenter->Add(pDeveloper)

/*
아래 호출시 아래가 출력되어야 함
나이 25세 kim이 인천 근무지에서 내과 전공으로 환자를 치료하다.
나이 30세 Lee이 서울 근무지에서 육군병과로 나라를 지키다.
나이 19세 Hong이 부산 근무지에서 c++기술로 개발을 하다.
*/

pCenter->DoWorkAll();
}



/////////////////////


이렇게 하는게 문제입니다.
각 클래스는 사람, 근로자, 군인, 의사, 개발자 그리고 근로자 센터 클래스 이렇게 6개가 되겠으며
사람 클래스와 근로자 클래스는 추상클래스로 객체 선언이 불가능하게 만들어야 합니다.(선언하면 에러나게..무슨뜻인지 아시죠?)

그리고 근로자센터가 이들을 리스트로 연결해서 출력까지 하게 만들어야 합니다.
또 파일들을 분리해서 작성하세요. main.cpp에 다 넣어서 복잡하게 만들지 마시고 ㅋ


일단 개인적으로 만들어 보시고 제가 ㅁ나든것과 비교해 보세요.
여러분이 더 잘만드셨을껍니다. ㅠㅠㅠ

전 템플릿도 쓰지 않았습니다. 단지 c++로 클래스와 상속, 가상함수 들을 이용한 부분까지만 사용했습니다.
열공합시다!! ㅋ

+ Recent posts