C++/K-MOOC 객체지향프로그래밍(C++기반)
5주차 구조체와 함수(24.12.31)
머슬머슬가이
2025. 4. 30. 02:56
5-1 구조체 선언과 객체 생성
구조체 선언 Type1
struct Score
{
const char* strName;
int nKor;
int nEng;
int nMath;
double fAverage;
};
int main()
{
struct Score Student1;
struct Score* pStudent2 = new struct Score;
//정적 개체 사용
Student1.strName = "KsKim";
Student1.nMath = 95;
Student1.nKor = 85;
Student1.nEng = 75;
//동적 개체 사용
pStudent2->strName = "UsChoi";
pStudent2->nMath = 100;
pStudent2->nKor = 80;
pStudent2->nEng = 100;
Student1.fAverage = (Student1.nKor + Student1.nEng + Student1.nMath) / 3.0f;
pStudent2->fAverage = (pStudent2->nKor + pStudent2->nEng + pStudent2->nMath) / 3.0f;
cout << "-------------성적표-------------\\n";
cout << " 이름 국어 영어 수학 평균 \\n";
cout << "--------------------------------\\n";
printf("%8s %5d %4d %5d %5.1f \\n", Student1.strName, Student1.nKor, Student1.nEng, Student1.nMath, Student1.fAverage);
printf("%8s %5d %4d %5d %5.1f\\n", pStudent2->strName, pStudent2->nKor, pStudent2->nEng, pStudent2->nMath, pStudent2->fAverage);
double fKorEaverage = (Student1.nKor + pStudent2->nKor) / 2.0;
cout << "국어 평균 = " << fKorEaverage << endl;
//동적 개채 해제
delete pStudent2;
}
// }을 만나면 정적 개체는 자동 해제
출력값
구조체 선언 Type2
struct Score
{
const char* strName;
int nKor;
int nEng;
int nMath;
double fAverage;
}Student1, *pStudnet2; //메모리에 실재하는 객체 생성
구조체 선언 Type3
typedef struct Score
{
const char* strName;
int nKor;
int nEng;
int nMath;
double fAverage;
} Mark; //구조체 별칭
int main()
{
Mark Student1;
Mark* pStudent2 = new Mark;
}
5-2 구조체와 배열
구조체 초기화
- 구조체 객체 생성
- 객체 = {자료1, 자료2, 자료3 , , ,}
typedef struct Score
{
const char* strName;
int nKor;
int nEng;
int nMath;
double fAverage;
}Mark;
int main()
{
Mark Student1;
Mark* pStudent2 = new Mark;
Student1 = { "KsKim" ,85,75,95 };
*pStudent2 = { "UsChoi", 80, 100, 100 };
Student1.fAverage = (Student1.nKor + Student1.nEng + Student1.nMath) / 3.0f;
pStudent2->fAverage = (pStudent2->nKor + pStudent2->nEng + pStudent2->nMath) / 3.0f;
cout << "-------------성적표-------------\\n";
cout << " 이름 국어 영어 수학 평균 \\n";
cout << "--------------------------------\\n";
printf("%8s %5d %4d %5d %5.1f \\n", Student1.strName, Student1.nKor, Student1.nEng, Student1.nMath, Student1.fAverage);
printf("%8s %5d %4d %5d %5.1f\\n", pStudent2->strName, pStudent2->nKor, pStudent2->nEng, pStudent2->nMath, pStudent2->fAverage);
double fKorEaverage = (Student1.nKor + pStudent2->nKor) / 2.0;
cout << "국어 평균 = " << fKorEaverage << endl;
delete pStudent2;
}
구조체 배열
typedef struct Score
{
const char* strName;
int nKor, nEng, nMath;
double fAverage;
}Mark;
int main()
{
Mark Student[30]; //Type3 사용
//개별 초기화
Student[0].strName = "KsKim";
Student[0].nKor = 85;;
Student[0].nEng = 75;
Student[0].nMath = 95;
//일괄 초기화
Student[1] = { "UsChoi", 80, 100, 100 };
cout << "-------------성적표-------------\\n";
cout << " 이름 국어 영어 수학 평균 \\n";
cout << "--------------------------------\\n";
double fKorSum = 0;
for (int i = 0; i < 2; i++)
{
Student[i].fAverage = (Student[i].nKor + Student[i].nEng + Student[i].nMath) / 3.0;
printf("%8s %5d %4d %5d %5.1f \\n", Student[i].strName, Student[i].nKor, Student[i].nEng, Student[i].nMath, Student[i].fAverage);
fKorSum += Student[i].nKor;
}
cout << "국어평균 = " << fKorSum / 2.0 << endl;
}
5-3 함수의 기본 값 호출방식과 변수 사용범위
함수선언과 함수호출
void Test()
{
cout << "테스트 \\n";
}
int main()
{
for (int i = 0; i < 3; i++)
{
Test();
}
}
출력값
값 호출 방식
1. 기본형
void Func(int b)
{
b = b + 10;
cout << "b = " << b << endl;
}
int main()
{
int a(10);
Func(a);
cout << "a = " << a << endl;
}
출력값
![]() |
![]() |
2. 포인터 역참조
void Func(int b)
{
b = b + 10;
cout << "b = " << b << endl;
}
int main()
{
int a(10);
Func(*a);
cout << "a = " << a << endl;
}
출력값
![]() |
![]() |
3. 값호출 방식
int sum(int x, int y)
{
int z = x + y;
return z;
}
int main()
{
int i = 10, j = 20, nSum;
printf("초기 값 : i = %d, j = %d \\n", i, j);
nSum = sum(i, j);
printf("반환된 값 : %d \\n", nSum);
}
출력값
변수의 종료
지역변수
int main()
{
int i = 10, j = 10; // 1번
printf("1. j = %d\\n", j);
if (i > 0)
{
int j = 20; //2번
printf("2. j = %d\\n", j);
} //2번 j 메모리 해제
printf("3. j = %d\\n", j);
} // 1번 j 메모리 해제
출력값
2. 전역변수
int i, j;
void Test()
{
i = 300;
j = 30;
printf("1. 전역 j = %d\\n", j);
}
int main()
{
int j = 20;
Test();
printf("2. 지역 j = %d\\n", j); //지역변수 j
printf("3. 전역 j = %d\\n", ::j); //전역변수 j
printf("4. 전역 i = %d\\n", i); //전역변수 i
}
출력값
3. 정적변수
void Test()
{
int nData1 = 10;
static int nData2 = 10;
cout << "nData1 = " << nData1;
cout << ", nData2 = " << nData2 << endl;
nData1++;
nData2++;
}
int main()
{
for (int i = 0; i < 5; i++)
{
Test();
}
}