관리 메뉴

ComputerVision Jack

[C++프로그래밍 Chapter11] 본문

Programming Language/C++ Programming

[C++프로그래밍 Chapter11]

JackYoon 2020. 2. 1. 17:18
반응형

[대입 연산자 오버로딩]

대입 연산자 오버로딩은 복사 생성자와 매우 유사하다.

 

디폴트 대입 연산자

  • 정의하지 않으면 디폴트 대입 연산자가 삽입된다.
  • 디폴트 대입 연산자는 멤버 대 멤버 얕은 복사를 진행한다.
  • 동적할당을 할 경우, 직접 정의해야 한다.

Sample s1(5, 10);

Sample s2(10, 20);

s2 = s1;

# s3.operator=(s1); 의 의미를 멤버 함수 방식으로 내포하고 있다.

 

디폴트 대입 연산자 문제점

복사 생성자의 문제점과 마찬가지로 소멸자 호출과정에서 문제가 발생한다.

 

상속 구조에서 대입 연산자 호출

유도 클래스의 대입 연산자에 아무런 명시를 하지 않으면 기초 클래스 대입 연산자가 호출 되지 않는다.

 

유도 클래스 대입 연산자 정의에서 명시적으로  기초 클래스 대입 연산자 호출문을 삽입하지 않으면

기초 클래스 대입 션산자는 호출되지 않아서 멤버대 멤버의 복사가 이루어 지지 않는다.

 

이니셜 라이저를 통한 대입연산자

B와 C 클래스 private로 A클래스 객체가 멤버 변수로 선언되어 있다고 할때,

B(const A& ref) : men(ref) { }

C(const A& ref) : {men = ref};

#B는 복사 생성자만 호출된다. C의 객체 생성에선 생성자와 대입연산자까지 호출된다.

[배열의 인덱스 연산자 오버로딩]

기존의 배열 대신 배열을 클래스로 만들어 정의내려간다.

ArrClass[10];

int operator[ ] (int index) { ... }

[]연산자의 오버로딩으로 접근할 수 있다.

따라서 ArrClass[ ] (10);으로 표기 할 수 있다.

 

또한 배열 크래스 내의 const 멤버함수에 접근하기 위해, 연산자 함수에도 const선언이 필요하다.

따라서 const이용하여 함수를 오버라이딩하여 해결한다.

[그 외 연산자 오버로딩]

newdelete연산자도 연산자이기 때문에 오버로딩이 가능하다.

 

스마트 포인터(Smart Pointer)

포이터 역할을 하는 객체를 지칭한다.

 

One Class 존재.

Class Two{

    private:

        One * hana;

    public:

        Two(One * ptr) : hana(ptr) {  }

};

#객체를 생성하고 return을 만나면 자동적으로 소멸자의 호출이 이루어진다.

 

연산자 오버로딩과 펑터(Functor)

인자 전달에 사용되는 ( )도 연산자이다.

( )도 오버로딩을하여 사용하면, 객체를 함수처럼 사용할 수 있다.

 

이러한 함수처럼 동작하는 클래스를 펑터라고한다.

sample(5, 10);

sample.operator( ) (5, 10);

 

임시 객체로의 자동 형변환, 형변환 연산자

임시객체 생성하여 임시객체를 대상으로 대입 연산자를 호출한다.

 

형변환 연산자를 통하여 연산자 오버로딩 또한 가능하다.

반응형

'Programming Language > C++ Programming' 카테고리의 다른 글

[C++프로그래밍 Chapter13]  (0) 2020.02.04
[C++프로그래밍 Chapter12]  (0) 2020.02.03
[C++프로그래밍 Chapter10]  (0) 2020.01.31
[C++프로그래밍 Chapter9]  (0) 2020.01.30
[C++프로그래밍 Chapter8]  (0) 2020.01.29
Comments