- 함수
원하는 기능들을 모아 하나의 도구처럼 사용할 수 있도록 해줌
반환타입 함수명() {
//코드 작성
}
형태는 다음과 같다. 함수명은 대문자로 시작해 의미 단위로 다시 대문자를 적어 구분해주는 파스칼 케이스를 따른다.
함수 실행 시에는 함수명(); 형태로 적어주어야 한다.
> 인자를 포함하는 함수
void Print(int n) {
//코드
}
위의 예시와 같이 괄호 안에 인자의 타입과 변수명을 넣어준다.
함수에서 값을 반환하려면 return을 사용한다.
int Add(int a, int b) {
return a + b;
}
위의 예시와 같이 원하는 값을 return 뒤에 적으면 반환할 수 있다.
함수는 return을 만나게 되면 내부의 모든 코드를 수행하지 못했더라도 즉시 종료된다.
- Call By Value
> 함수에 인자를 넘길 때는 기본적으로 값을 복사해서 넘겨준다.
> 실제 인자값 자체가 바뀌는 것은 아니다.
- Call By Reference
> 포인터: 변수의 주소를 나타낸다.
> 주소를 나타내는 변수(포인터변수)의 타입은 들어있는변수타입 * 으로 나타낸다. (ex. int * 타입 = int 변수의 주소를 가리킴)
> 원하는 변수의 주소를 나타내려면 변수명 앞에 &를 붙인다. (ex. &a)
> 포인터변수가 가리키고 있는 곳에 적힌 값을 참조하기 위해서는 앞에 *을 붙여주어야 함 (ex. cout << *b //포인터변수 b가 가리키는 곳에 담긴 값)
> 함수에 인자를 넘길 때 주소값을 넘겨준다.
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
cout << a << " " << b << endl;
}
int main() {
int n = 10, m = 20;
swap(n, m);
cout << n << " " << m;
return 0;
}
> 위는 &를 이용한 참조를 통해 Call By Reference를 구현한 것이다. 참조는 이미 존재하는 객체를 가키는 또 다른 이름이다.
> int & 라는 표기만으로 n, m을 넘길 시 전달되는 객체가 복사되지 않고, 원본 객체에 대한 참조가 전달되어 주소를 전달한 것과 같은 효과를 얻을 수 있다.
> 참조를 만들면, 하나의 객체에 대해 그 객체를 가리키는 이름이 두 개가 된다.
- 배열
> 배열은 연속된 주소들로 이루어져 있다.
> 포인터값에 1을 더하면 배열의 그 다음 원소를 가리키도록 주소 값을 변화시킨다.
> *x = arr, *(x + 1) 은 arr배열의 두 번째 원소값
> 배열명 arr은 그 자체로 배열 첫 번째 원소 주소인 &arr[0]을 나타낸다.
> 배열을 함수의 인자로 넘길 때는 배열 첫 번째 원소 주소만 넘기면 된다. (배열의 원소들은 연속하여 주소가 할당되기 때문)
//인자타입 = 포인터
void Func(int *x) {
//코드
}
//인자타입 = 포인터 X
void Func(int x[]) {
//코드
}
위의 두 가지 방법으로 배열을 함수의 인자로 전달할 수 있다.
모두 주소를 기반으로 하기 때문에 함수 내부에서 값을 변경시킨 이후에 함수를 빠져나가도 실제 값이 바뀐다.
- 정렬
> 숫자 오름차순 정렬: #include <argorithm> 을 위에 추가해준 후, std::sort(배열명 + 시작인덱스, 배열명 + 끝인덱스+1) 함수 사용
> 숫자 내림차순 정렬: #include <functional> 을 추가한 뒤, std::sort(배열명 + 시작인덱스, 배열명 + 끝인덱스+1, greater<int>()) 를 사용, 오름차순 함수 뒤에 greater<int>()를 추가해주면 된다.
> 문자열 알파벳순 정렬: sort(문자열명.begin(), 문자열명.end()) 로 sort 함수에 해당 문자열의 .begin(), .end() 값을 넣어주어야 한다.
> 문자열로 구성된 리스트 정렬: 숫자 정렬과 같다.
- 객체
객체는... 정해진 틀을 만드는 것과 같다고 생각한다. 예를 들어 사람의 정보를 기록할 때 이름, 나이, 지역을 기록하기로 했다면 이 세 가지 특징을 적는 틀을 만들어야 할 것이다. 이러한 틀을 만들어주는 것이 객체이다. 하나의 사람으로 예를 들었지만, 이 객체는 사람 뿐만이 아니라 다양한 대상이 될 수 있을 것이다.
> 클래스: 객체를 지칭하는 것이 가능하도록 해준다.
class Student {
public:
string n;
int a;
// 생성자
Student(string n, int a) {
this->n = name;
this->a = age;
}
};
생성자는 이 클래스의 형태를 정의한다. 인자로 넘어오는 값들을 생성자에서 받는다.
여기서 저장되는 현재 학생의 이름과 나이 변수인 n과 a는 클래스의 멤버변수 라고 부른다. 멤버변수들을 조회하기 위해서는 객체이름.멤버변수 형태로 사용이 가능하다.
'언어' 카테고리의 다른 글
| c++ 출력/변수/입력/연산자/조건문/반복문/배열/문자열 (0) | 2026.03.01 |
|---|---|
| c++ 기본 (출력 ~ 2차원 배열 개념) (0) | 2026.01.15 |