[ 연산자 오버로딩 #1 ]

 

연산자 오버로딩을 안해주면 아래와 같이 + 연산을 무엇을 해야되는지 알 수 없다.

 

함수도 멤버함수 vs 전역함수가 존재하는것처럼

연산자 함수도 두 가지 방식으로 만들 수 있다.

 

멤버 함수로 :   a op b ( 왼쪽을 기준으로 실행됨 ) 단, a(피연산자)가 클래스여야 가능

멤버 함수로 만들면 편하게 만들수 있지만 

그러나 b op a(클래스) 의 경우 실행되지 않기 때문에 아래와 같은 전역함수로 만들기도 한다.

 

전역 함수로 : 

 

그렇다면 무엇이 더 좋은가? 그런거 없음.   둘 중에 하나만 지원하는 경우도 있음.

 

대표적으로 대입 연산자 ( a =b ) 는 전역 연산자 version으로는 못만든다.

( c++ 언어 차원에서 프로그래머들이 다분이 실수 할 수 있어서 막아놓았다. ) 


 

[ 연산자 오버로딩 #2 ]

 

보통은 대입 연산자를 오버로딩 할때 return 타입을 void로 하지 않고 자기 자신을 리턴하게끔 만든다.

 

this를 이용해서 return 해준다. ( *대입 연산자는 멤버 함수로 밖에 오버로딩 할 수 없다. )

자기자신& operator=(int arg){

	return *this;
}

 

 

복사 대입 연산자

: 대입 연산자인데 파라미터로 자신과 동일한 타입의 참조 타입을 받는 연산자.

 

 

[ 복사 생성자 ] [ 복사 대입 연산자 ]   등등 복사 시리즈가 특별 대우를 받는 이유는

말 그대로 해당 객체가 '복사' 되길 원해서 그렇다.

 

우리가 따로 대입 연산자를 만들지 않는다면 컴파일러가 알아서 만들어서 해준다. 

아래 처럼 어디에도 대입 연산자를 정의 하지 않았음에도 실행된다.

 

근데 이때 컴파일러는 말 그대로 멤버 변수 x, y 를 메모리에 하나 하나씩 전부 복사해서 처리하게 된다.

 

클래스의 멤버가 별로 없으면 상관 없지만 클래스의 멤버 변수로 또 다른 클래스를 가지고 있거나 등등 복잡해지면 비용이 많이 들기 때문에. ( 나중에 깊은 복사 vs 얕은 복사 에서 자세히 다루자. ) 

 

[복사 대입 연산자] 를 정의하고 이용해준다.

 


[ 객체지향 마무리 ]

 

struct 와 class 는 그냥 default가 private인지 아닌지 차이 정도로 거의 동일하다.

 

 

 

static 함수, static 변수

 

: static 변수는 어떤 메모리에 올라가냐?

- 초기화 하면 .data 에 올라가고,  안하면 .bss 영역에 올라간다.

 

설계도 상에만 멤버 변수지 사실 전역 변수나, 전역 함수 처럼 동작한다.

 


 

 

'C++과 언리얼로 만드는 게임 개발 > Part1. C++ 문법' 카테고리의 다른 글

Day8 - ② ( 64.28% )  (0) 2022.03.31
Day8 - ① 동적할당 / ★타입 변환★( 61.60% )  (0) 2022.03.31
Day6 ( 52.67% )  (0) 2022.03.30
Day5 ( 47.32% )  (0) 2022.03.28
Day4 ( 42.85% )  (0) 2022.03.25

+ Recent posts