Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

From ZeroWiki
Revision as of 04:34, 7 August 2015 by imported>woojin818
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

대입 연산자와 연산자 오버로딩  : 연산자의 기능을 사용자가 임의로 재정의할 수 있다.

              클래스 내부에 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에서 생기는 에러를 컴파일 타임에서 생기도록 당겨올 수 있다.
              생성자, 복사 생성자 뿐 아니라, 함수와 연산자 역시도 삭제(금지)할 수 있다.
              원하지 않는 경우 확실히 금지 시켜놓는 것이 좋다.