CS/C++

C++ 공부 섹션7 : 홍정모의 따배씨쁠쁠

샤아이인 2022. 1. 16.

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 하고 생각하고 써갈 예정입니다. 모든 내용을 이곳에 올릴수는 없으며, 그중 기억남은 몇가지 내용 위주만 올리겠다.

1) 섹션7

이번단원에서 가장 흥미로웠던 주제는 함수의 오버로딩이다. 같은 함수명임에도 불구하고 다른 기능으로 사용할수 있다니.

정말 편리한 것이 아닌가 싶다!!

◆ 참조형을 반환값으로 사용하는 예를 볼 수 잇었다.

위의 사진에서는 반환값을 참조형으로 하여 값을 수정하는 예를 보이고 있다.

우선 메모리를 main함수 안에서 정의하여 get함수가 실행된후 stack에서 사라지는 오류를 피한다.

또한 get에서 my_array[ix]의 별명을 반환하고 있는것이다. 그 별명에 1024를 대입하니 원본에서도 값이 변경되 있음을 알 수 있었다.

 

 튜플은 C에서는 본적이 없고 Python을 공부할때 사용했던 기억이 있다. return값을 한번에 여러개 받아오고 싶은 경우 사용한다.

이렇게 튜플로 return값을 받아오는 것 말고도, 참조형을 사용해 원본값을 바꿀수도 있다.

 

 다음 사진에서 동일한 이름의 함수 add가 2개 정의되어있다.

main에서 add를 실행할때 어느 함수인지 적절한 add함수를 찾아 사용한다고 한다.

이를 구분할때 인자의 type과 갯수에 의해 두 add함수가 구분된다고 한다.

이렇게 같은 이름을 같은 함수가 다르게 사용되는것을 함수의 오버로딩 이라고한다.

위의 예에서는 add(1, 2) 는 3이 반환될 것이고(첫 add함수 사용), add(3.0, 4.0)은 7.0을 반환할 것이다(두번째 add함수 사용).

 

 함수에 argument를 주지 않을경우 default로 무엇을 사용할지 정할수 있다.

이때 몇가지 주의사항이 있었다.

1) Default parameter declaration을 할 때는 가장 오른쪽 parameter부터 정의 되어야한다.

int x=0, int y=1, int z=2
가능
int x, int y, int z=2
가능
int x=0, int y=1, int z
불가능

2) Definition이든 declaration이든 둥중 한쪽에서만 사용

둘중 한곳에서만 dafault parameter를 선언해줄 수 있다. 중복되면 안된다. 보통은 header 파일에 선언을 주로 해주기 때문에 헤더파일에 dafault값을 지정해 준다.

 

3) 모호한 사용(ambiguousity)를 피해야 한다.

만약 int add(int x) 와 int add(int x, int y = 10); 으로 오버로딩 되어있다면 add(10)은 둘중 어떤 함수를 사용해야 하는 것 인가?

이러한 모호한 사용방법은 지양해야하며 다른 방법의 사용을 추천한다.

 

 함수포인터를 쓸대 typedef를 사용하는것은 자료구조를 공부할때부터 줄곳 봐왔어서 쉽게 받아들였다.

 

 벡터의 내부 작동을 알게 되었다.

Capacity(용량) 는 vector의 전체 크기. Size는 Vector에 들어 있는 유효한 데이터들의 개수 를 의미한다.

 

위의 예시를 보면 v.resize(2)를 하여 사이즈를 2로 줄인다. 이후 출력해보면 1과 2만 출력이 된다. 따라서 Size가 2가되는 것은 당연하다.

하지만 Capacity는 3으로 변하지 않았다. 이는 vector가 실제로 동적메모리를 다시 할당하고 free 시키는 것이 아닌 '눈속임'을 하고있기 때문이다.

즉, 실제로 줄이는 것이 아닌 줄인척 하는것이다.

따라서 Capacity는 그대로 남아있지만, 유요한 공간인 Size는 줄어들었다.

 

또한 std::vector.reserve(크기)를 통해 미리 어느정도 큰 메모리 공간을 할당받은 후 자료구조의 stack처럼 push와 pop를 사용하면, overflow현상을 막을수 있다.

예를 들어 overflow현상이 나타는중에 재귀호출을 사용해야 한다면 이렇게 vector를 stack으로 사용하는 방법이 있는것 이다.

 

2) 나의 현황

● https://www.learncpp.com/cpp-tutorial/references-and-const/ 를 쭉 읽어봤는대 기초지식이 매우 충분하며 2020년도에 새로 추가된 내용들도 있어 도움이 많이 될 것 같다. 강의를 듣다 부족한 부분이나 이해가 덜된부분은 여기서 챙겨 읽고 있다.

이글의 모든 사진과 내용의 출처는 홍정모 교수님께 있습니다.

홍정모 교수님 블로그:

댓글