C++ HW 및 Chapter 6 Check Point 정리
10회차: 8.1. 3x4행렬 입력 후 열의 합 구하기
#include <iostream>
using namespace std;
const int SIZE = 4;
double sumColumn(const double m[][SIZE], int rowSize, int columnIndex); // prototype
int main()
{
double matrix[3][SIZE];
cout << "Enter a 3-by-4 matrix row by row: " << endl;
for (int i = 0; i < 3; i++) // i - row
for (int j = 0; j < SIZE; j++) // j - col
cin >> matrix[i][j]; // 배열 입력
// 열의 합 출력
for (int j = 0; j < SIZE; j++)
cout << "Sum of the elements at column " << j << " is " << sumColumn(matrix, 3, j) << endl;
return 0;
}
double sumColumn(const double m[][SIZE], int rowSize, int columnIndex)
{
double total = 0;
for (int i = 0; i < rowSize; i++)
total += m[i][columnIndex]; // col의 값 더하기
return total; // col 값을 더한 totaㅣ 반환
}
6.6 다음 코드에서 에러가 발생하는 이유
void p(double x, double y)
{
cout << x << " " << y << endl;
return x + y;
}
: void 함수는 return 값을 반환하지 않음
6.12 오버로딩
- 두 함수명이 같을 때, 같은 프로그램으로 정의된다. 이 때 함수가 오버로딩되엇ㅅ다고 한다.
- 함수명이 동일한 건 상관 X, 하지만 파라미터 타입이 달라야 한다.
6.16 인라인 함수
- 함수 호출을 피하기 위하여 인라인 함수를 제공한다.
- 인라인 함수는 호출X, 컴파일러에 의해 인라인 함수를 호출하는 지점에 함수 코드를 복사하는 방식이다.
6.19 전역함수와 지역함수 (global variable & local variable)
- 지역함수는 기본값 X, 초기화 필요
-전역함수는 기본값 0 설정
#include <iostream> // 에러 발생
using namespace std;
int j;
int main()
{
int i;
cout << i << endl;
cout << j << endl;
}
- i가 정의되지 않았기 때문에 오류 발생
#include <iostream> / j만 출력 , 정상 실행
using namespace std;
int j;
int main()
{
int i;
cout << j << endl;
}
// j값 0 출력
6.20 static 지역 변수
- static 지역 변수는 지역 변수에 저장된 값을 프로그램이 끝날 때까지 유지한다
(일반적인 지역 변수는 함수 실행완료 시 소멸)
int j = 40; // 전역 변수 j = 40
void p()
{
int i = 5; // 지역 변수 i = 5
static int j = 5; // 정적 지역 변수 j =5
i++; // i = 6, i 소멸 후 다시 6
j++; // j = 6, j는 6에서 유지 후 7
cout << i << endl;
cout << j << endl;
}
int main()
{
p(); // i = 6, j =6
p(); // i = 6, j =7
}
6.21 함수에서의 변수 정의
void p(int i) // 에러 발생
{
int i = 5;
cout << i << endl;
}
- 함수에서 변수의 파라미티ㅓ를 정의하면 안됨
값에 의한 전달(pass-by-value)
- 매개변수가 있는 함수 호출 시 인수의 값이 매개변수로 전달 > pass by value
- 함수 내부에서의 매개변수 값의 변경은 호출한 곳의 변수에 전혀 영향을 미치지 않음
참조 변수(Reference variable), 원래 변수에 대한 별명/별칭
- 원 변수를 참조하기 위해 참조 변수를 함수의 매개변수로 사용
- 참조 변수를 통해 변수에 저장된 원래 데이터에 접근하거나 수정 가능
- 변수의 앞/ 변수의 데이터 유형 뒤에 & 붙임 (ex. int &i / int& i / int & r)
① 참조 변수는 선언과 동시에 초기화하여야 한다.
② null 값을 저장할 수 있는 포인터와 다르게 null을 참조할 수 없다.
③ 참조하려는 변수와의 데이터 타입을 일치시켜야 한다. 또한 const로 선언된 변수는 const로 non-const는 non-const로만 참조할 수 있다.
④ 한번 참조한 변수는 재참조 불가능하다.
8회차: 세 수 정렬
// 참조변수 사용안할시 swapㅇㅣ 안됨
#include <iostream>
using namespace std;
void sortNum(double& num1, double& num2, double& num3);
int main()
{
double n1, n2, n3;
cout << "Enter three nums: ";
cin >> n1 >> n2 >> n3;
sortNum(n1, n2, n3);
cout << "After sorting three nums: " << endl;
cout << n1 << " " << n2 << " " << n3 << endl;
return 0;
}
void sortNum(double& num1, double& num2, double& num3)
{
if (num1 > num2)
{
double temp = num1;
num1 = num2;
num2 = temp;
}
if (num2 > num3)
{
double temp = num2;
num2 = num3;
num3 = temp;
}
if (num1 > num2)
{
double temp = num1;
num1 = num2;
num2 = temp;
}
}
6.22 pass-by-value 와 pass-by-reference
#include <iostream> // 0
using namespace std;
void maxValue(int value1, int value2, int max)
{
if (value1 > value2)
max = value1;
else
max = value2;
}
int main()
{
int max = 0;
maxValue(1, 2, max);
cout << max << endl;
return 0;
}
#include <iostream> // 오류
using namespace std;
void maxValue(int value1, int value2, int& max)
{
if (value1 > value2)
max = value1;
else
max = value2;
}
int main()
{
int max = 0;
maxValue(1, 2, max);
cout << max << endl;
return 0;
}
#include <iostream>
using namespace std;
void f(int i, int num)
{
for (int j = 1; j <= i; j++)
{
cout << num << " ";
num *= 2;
}
cout << endl;
}
int main()
{
int i = 1;
while (i <= 6)
{
f(i, 2);
i++;
}
return 0;
}
// 2
2 4
2 4 8
2 4 8 16
2 4 8 16 32
2 4 8 16 32 64
#include <iostream> // 위와 동일
using namespace std;
void f(int& i, int num)
{
for (int j = 1; j <= i; j++)
{
cout << num << " ";
num *= 2;
}
cout << endl;
}
int main()
{
int i = 1;
while (i <= 6)
{
f(i, 2);
i++;
}
return 0;
}
// 2
2 4
2 4 8
2 4 8 16
2 4 8 16 32
2 4 8 16 32 64