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

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

From ZeroWiki
imported>woojin818
No edit summary
 
imported>woojin818
No edit summary
 
Line 1: Line 1:
대입 연산자와
대입 연산자와 연산자 오버로딩  :  연산자의 기능을 사용자가 임의로 재정의할 수 있다.
연산자 오버로딩  :  연산자의 기능을 사용자가 임의로 재정의할 수 있다.
               클래스 내부에 method로써 정의한다.
               클래스 내부에 method로써 정의한다.
               연산자 사용을 금지하는 목적으로 private에 연산자 오버로딩을 하는 경우도 있다.
               연산자 사용을 금지하는 목적으로 private에 연산자 오버로딩을 하는 경우도 있다.

Latest revision as of 04:34, 7 August 2015

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

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