U E D R , A S I H C RSS

cpp스터디인데이름을못짓겠어요/8월04일

대입 연산자와 연산자 오버로딩 : 연산자의 기능을 사용자가 임의로 재정의할 수 있다.
클래스 내부에 method로써 정의한다.
연산자 사용을 금지하는 목적으로 private에 연산자 오버로딩을 하는 경우도 있다.
a - b에서 -가 오버로딩 되어있다면, a - b를 a.operator-(b) 로 바꾸어 주는 과정을 컴파일러가 자동으로 해준다.
-a의 경우, a.operator-() 의 방식으로 할 수 있다.
++a 나 = 연산자에 대해서는 참조형으로 parameter을 받고 참조형으로 return해 주는 것이 쓸 데 없는 값복사가 일어나지 않는다.
++a 의 경우에는 참조형을 return, a++ 의 경우에는 객체 자체를 return. 시점의 문제.

a + 3 이라면 다른 type도 예측이 가능하다. 하지만, 3 + a라면 primitive type이라 다른 type 간의 연산 시 type 예측이 불가능하다.
primitive type에 대한 operator의 경우에는 class 내부의 Method가 아니라 외부에서 선언하며, parameter로써 연산에 필요한 피연산자를 받는다.
Ex) A operator + (int ,A); // 이는 class A의 멤버가 아님.
위처럼 오버로딩한 연산자는 class A의 private 변수에 접근 할 필요가 있다. 이 때, class A에서 friend 선언을 통해 접근을 허가한다.

Ex)
class A {
int val;
public :
A operator-(A rhs) {
A res;
res.val = val - rhs.val;
return res;
}

}

명시적으로 삭제 : Ex)
class A {
A() = delete;
} ==> 이 클래스는 객체를 만들 수 없다.
기본 생성자가 아닌 다른 생성자만 정의한 경우에도 delete를 통해 기본 생성자를 삭제해주면, Linker에서 생기는 에러를 컴파일 타임에서 생기도록 당겨올 수 있다.

생성자, 복사 생성자 뿐 아니라, 함수와 연산자 역시도 삭제(금지)할 수 있다.
원하지 않는 경우 확실히 금지 시켜놓는 것이 좋다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:38
Processing time 0.0100 sec