11주차 요약

김서영·2021년 11월 22일
0

연산자 중첩(operator overloading)

연산자 오버로딩이라고 한다.
다형성을 구현하는 방법의 하나다.
기존에 사용하고 있는 연산자의 기능을 클래스에서 새롭게 정의하여 사용한다.
특별한 함수 이름을 가진 함수라고 할 수 있다.

연산자의 개념과 종류

연산자(operator)는 변수 또는 상수에 대하여 무엇인가를 행하도록 하는 단어나 기호를 의미한다.
ex. + , - , * , % 등
피연산자(operand)는 연산자가 연산하는 대상을 뜻한다.
피연산자의 수에 따라 단항(unary), 2항(binary), 3항(ternary)으로 구분한다.

연산자의 우선순위(Precedence)

한 수식에 연산자들이 여러 개 있을 때 우선순위가 제일 높은 것은 괄호 안의 수식이다.
연산은 우선순위가 높은 것부터 실행하며, 우선순위가 같은 경우 왼쪽에서 오른쪽으로 실행한다.
결합방향(Associativity)이 ‘->’ 이다.
대입연산자는 결합방향이 ‘<-’이다.

연산자 중첩의 필요성

‘+’연산자가 다양한 덧셈에 사용할 수 있도록 연산자의 의미를 확대 재정의하기 위해 필요하다.
더한다는 의미의 연산은 모두“+”연산자 하나로 구현한다.

* : 선언문(구두점) vs. 실행문(연산자)

int *px; 포인터 px선언, 선언문에서 *는 포인터를 선언하는 두 점

y=*px; px가 저장하고 있는 주소로 가서 값을 가져온다.

this 포인터

this 포인터는 자동으로 시스템이 만들어 주는 포인터이다.
this 포인터에는 현재 객체의 주소가 들어있다.
*this는 객체(의 값이)다.

연산자 중첩 형식

객체와 객체 사이의 연산에서 사용자가 원하는 연산을 하도록 한다.
단항연산자 중첩은 전치와 후치 2가지의 형식을 가진다.
리턴형 operator 연산자명(); //전치, ++x

리턴형 operator 연산자명(int); //후치, x++

이항연산자 중첩은‘리턴형 operator 연산자명(매개변수);’의 형식을 가진다.

단항 연산자 중첩

++, --, -(부호)가 있다.
피연산자가 하나이다.
단항연산자를 중첩할 때는 객체가 정해져 있기 때문에 매개변수가 필요 없다.

전치 단항 연산자(Prefix Operator) 중첩

변수명 앞에 연산자가 오는 것을 말한다(++x, --i 등).
전치 연산자는 연산이 먼저 일어나고 대입이 된다.
리턴형 operator 연산자명();의 형식을 가진다.
매개변수가 없다.

후치 단항 연산자(Postfix Operator) 중첩

변수명 뒤에 연산자가 오는 것을 말한다(x++, i-- 등).
후치 연산자는 대입이 먼저 일어나고 연산이 된다.
리턴형 operator 연산자명(int);의 형식을 갖는다.
매개변수를 하나 가진다.

이항 연산자 중첩

+, -, ×, ÷, % 등 연산자 양쪽에 피연산자가 필요한 연산자이다.
연산자의 왼쪽 피연산자가 연산자 함수의 주체가 되며, 오른쪽 피연산자는 매개변수가 된다.

형변환 함수(Type Conversion Function)

한 객체의 자료형을 다른 객체의 자료형으로 변환시키고자 할 때 이용한다.
operator 리턴형() {return 변환값;}
리턴형은 변환하고자 하는 자료형이고 변환값은 변환을 수행할 값이다.
매개변수를 갖지 않으며 형변환을 수행하는 클래스의 멤버함수이어야 한다.

연산자 중첩의 제약

<. >, < .*(멤버 포인터 연산자) >, < :: >
첫 번째 피연산자로 그 객체를 갖는다는 미리 정의된 의미를 가지기 때문에 중첩할 수 없다.
< ?: >, < sizeof >
중첩이 필요 없다고 생각하기 때문에 중첩할 수 없다.

연산자 중첩시 주의 사항

우선순위를 변경할 수 없다.
단항 연산자를 다항 연산자로 변경할 수 없다.
임의의 새로운 연산자를 정의할 수 없다.
"=" 연산자를 제외하고, 연산자는 파생(자식) 클래스에 상속된다.


C++프로그래밍(21-2학기)한성현교수 강의 내용 변형 및 요약

0개의 댓글