C++ 6일차

2021. 6. 12. 21:11·C++
반응형

복사 생성자

복사 생성자에는 얕은 복사와 깊은 복사가 있다.

기본적으로 복사하기위해서는 초기화 리스트에 값을 전달시켜서 복사를 한다.

=>이때의 문제점은 포인터가 있는 경우에 같은 주소값을 공유한다는 점이다.

같은 주소값을 공유한다면?? 같은 힙 메모리의 데이터를 공유할 것이고 함수에서 나가며 소멸자가 데이터를 지운다.

그러면 같은 주소값이 가리키던 데이터는 사라지게 된다.

그러면 남아있는 주소값은 빈 데이터를 가리키는 형태가 되어버린다.(이것이 얕은 복사)

이 문제를 해결하기 위해 깊은 복사를 하는 것이다.

깊은 복사는 복사 생성자 내부에 주소값같은 것을 새로 생성해서 따로 구현을 하는 것이다.

이렇게하면 복사된 주소와 기존의 주소가 같은 공간을 가리키는 경우가 사라질 것이고 위의 문제는 해결될것이다.

사용법:

ex)

Example::Example(const Example& ex);

 

연산자는 단항연산자, 이항연산자, 기타 연산자 등 종류가 많다

C++에서는 이러한 연산자를 오버로딩할수있다.

Vector sum = v1 + v2;

Vector sum = v1.operator+(v2); //위 아래는 동일한 코드이다.

 

std::cout<<number;

std::cout.operator<<(number); //또한, 위 아래는 동일한 코드이다.

두 방식은 멤버 함수를 이용한 연산자 오버로딩이며, 멤버 함수를 이용해서만 오버로딩 가능한 연산자는 =,(),[],->등이다.

 

사용법

ex)

Vector operator+(const Vector& rhs) const;

 

friend 키워드??

다른 클래스, 함수가 나의 private, protected 멤버에 접근이 가능하게 허용

사용법 ex)

friend class Y; //클래스에 사용할수도 있다.

friend void foo(X& x); //함수에 사용할수도 있다

=>다만, friend 키워드는 oop특성의 캡슐화를 해침(특수한 경우에만 사용)

 

전역함수를 이용한 연산자 오버로딩은 friend를 사용

cout<<vector(10,20)까지는 호출이되지만 cout<<vector(10,20)<<endl;에서는 컴파일 에러
위 이미지를 해결한 방식

return을 이용하여 std::osteram& 형식의 os를 반환 위 방식에서 문제였던 매개변수 1번 std::ostream& os를 채움

=>해결

반응형
저작자표시 (새창열림)

'C++' 카테고리의 다른 글

C++ 8일차  (0) 2021.06.17
C++ 7일차  (1) 2021.06.13
C++ 5일차  (0) 2021.06.11
C++ 4일차  (0) 2021.06.09
C++ 3일차  (0) 2021.06.09
'C++' 카테고리의 다른 글
  • C++ 8일차
  • C++ 7일차
  • C++ 5일차
  • C++ 4일차
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (302)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (49)
        • 코딩 테스트 (4)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (4)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
C++ 6일차
상단으로

티스토리툴바