cpp7

2023. 11. 9. 13:50개발하는중/cpp

728x90
반응형

연산자 다중정의 

피연산자의 자료형과 연산자- 동일한 연산자라도 구체적인 처리 방법은 피연산자의 자료형에 따라 다름

 

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인수 생성자를 정의하여 만든다.

728x90

'개발하는중 > cpp' 카테고리의 다른 글

cpp6  (0) 2023.11.04
cpp5  (0) 2023.11.04
cpp4  (1) 2023.11.02
cpp3  (1) 2023.10.21
cpp2  (0) 2023.09.25