2023. 11. 9. 13:50ㆍ개발하는중/cpp
연산자 다중정의
피연산자의 자료형과 연산자- 동일한 연산자라도 구체적인 처리 방법은 피연산자의 자료형에 따라 다름
cpp에 정의된 연산자를 사용자가 만든 클래스의 객체에 대하여 사용할 수 있도록 정의한것이 연산자 다중정의
주요 연산자 다중정의 대상
클래스의 객체간 대입 및 이동대입 연산자-포인터 포함의 경우 고려할 필요
수치형 객체의 산술연산자 다중정의 - 교환 법칙도 함께 고려
두 객체를 비요하기 위한 관계 연산자
스트림 입,출력을 위한 <<,>> 연산자
다중정의 할 수 없는 연산자
멤버 선택 연산자
멤버에 대한 포인터 연산자
유효범위 결정 연산자
조건 연산자
다중정의 위치
클래스의 멤버로 정의, 클래스 외부에서 정의
전위 형식
returnclass classname :: operator 연산자기호 (){}
후위 형식
returnclass classname :: operator 연산자기호 (int){}
* 꼭 써야하나?
이항연산자 다중정의
returnclass classname:: operator 연산자기호(Argclass arg){}
스트림 출력 연산 다중정의
출력 <<
클래스에 속하지 않는 외부 별도 연산자로 정의 함
사용자가 선언한 클래스에서 C++에 정의된 연산자를 의미와 목적에 맞게 다중정의하여 사용할 수 있다.
멤버 선택 연산자, 멤버에 대한 포인터 연산자, 유효범위 결정 연산자, 조건 연산자는 다중정의할 수 없다.
단항 연산자인 ++와 -- 연산자는 전위 표기와 후위 표기 각각에 대해 다중정의할 수 있다.
이항 연산자의 다중정의는 좌측 피연산자에 해당되는 클래스에서 하며, 이때 *this가 좌측 피연산자, 형식 매개변수가 우측 피연산자에 해당된다.
특정 클래스에 속하지 않은 연산자 다중정의를 할 경우 피연산자가 모두 매개변수를 통해 전달되도록 연산자 다중정의를 한다.
필요하다면 피연산자의 private 멤버를 자유롭게 사용할 수 있도록 friend 지정을 한다.
대입연산자=우측 피연산자 데이터를 좌측에 변수에 담음
std:move = 인수로 전달되는 객체의 rvalue 참조 반환? 복사가 아닌 이동?
a = move(b);
배열 연산자[] 다중정의
int& Aclass::operator[](int i) { ... }
첨자 연산자는 값을 수정하기 위한 연산자와 값을 출력하기 위한 연산자 2개 구현 해야함
문자열 길이 구하기
tmep = strlen("abc"); temp = 3
문자열 복사
strcpy(target, copydata);
문자열 연결
strcat(target, connectdata);
string
#include <string>
대입 연산자는 우측 피연산자의 내용을 좌측 피연산자에 복사하고, 이동 대입 연산자는 rvalue인 우측 피연산자를 이동하는 연산자이다.
std::move 함수는 인수로 전달되는 객체의 rvalue 참조를 반환한다.
첨자 연산자([ ])는 첨자에 의해 지정되는 객체에 값을 저장하는 용도와 읽기 전용의 용도를 모두 고려하여 정의한다.
string은 문자열을 저장하기 위한 표준 C++ 라이브러리의 클래스로서, 문자열을 저장하고 처리하기 위한 유용한 기능을 제공한다.
형 변환 연산자는 값을 제공하는 클래스에서 값을 받는 수신 측 클래스의 이름으로 연산자를 제공하거나, 값을 제공받는 클래스에서 값을 제공하는 클래스의 객체를 인수로 받는 1인수 생성자를 정의하여 만든다.