[ 연산자 오버로딩 #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 |