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. 객체 = {자료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();
	}
}

 

출력값