코딩하렴

C++ 복사 생성자

by 으렴

 


복사생성자(복사하는 기능) → 주로 public

 

 

함수 4가지

1. 객체 생성시 매개변수로 객체를 넘겨줄경우.

2. 객체 생성시 객체를 대입할경우.

3. 멤버함수에 매개변수로 객체를 선언할 경우.

4. 멤버함수에서 객체를 리턴할경우.

 

 

복사생성자도 생성자임. 객체등록도해주면서 카피를 같이함.

 

C++ 일반적 생성자와 복사생성자가 있음.

클래스에 있는 모든 필드(값)를 전체 카피함.

 

A(const A &aa)

{

}

 

얕은 복사(디폴트) → 기본적으로 제공됨.

깊은 복사(개발자가 직접 코딩을 해야한다) → 명시적으로 일일히 작업 해주어야 한다.

언제? 필드를 포인터로 사용했을 경우에는 무조건 깊은 복사를 해야한다.

 

 

 

복사생성자함수

   1. 호출시기
      1) 객체 생성시 객체를 인자로 줄 경우.
      A aa; => 생성자호출
      A bb(aa); => 복사생성자호출
     
      2) 객체 생성시 객체를 대입 할 경우.
      A aa; => 생성자호출
      A bb = aa; => 복사생성자호출

      3) member function의 매개변수로 객체를 선언 할 경우.
      void A :: disp( A aa )

   4) 멤버함수에서 객체를 리턴할 경우.
   A getObject()
   {
   return 객체; //복사 생성자 호출
   }

   2. 객체의 모든 멤버의 값을 복사하는 기능을 제공.
   3. 기본적으로 얕은 복사를 제공.
   4. 깊은 복사는 기본적으로 제공하지 않기 때문에 개발자가 필요에 의해 제공해야 함.

 

 

*This에 대하여 설명 : 자기자신을 가리키는 객체포인터

void setA(int a1)

{

a=a1;

}

 

 

소멸자 함수

1. 객체 소멸 시 자동 호출 되어지는 함수
  1) 객체가 속해있는 함수가 끝날 때(정적)
  2) 동적메모리를 해제할 때(동적)
 2. (틸드)~클래스명(){}
 3. 매개변수 선언할수없다.
 4. 오버로딩 불가(1class내에 딱 1개 있음.)
 5. const member function으로 만들수없다.

 6. 객체의 잔여메모리를 깨끗하게 정리하는 역할.(개발자가 직접 해 주어야 한다)

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
using namespace std;
 
class A
{
    int *p;
public:
    A(int i = 0)
    {
        p=new int
        *= i;
    }
    A(const A& aa)
    {
        p = new int;
        *= *aa.p;
    }
    ~A()
    {
        delete p;
    }
    int getP(){return *p;}
};
 
void main()
{
    A aa(10);
    A bb(aa);
    cout<<bb.getP()<<endl;
}
cs

 

 

가상함수(자바 = 추상메소드)

 

 

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

C++ String 구현 해 보기  (0) 2019.02.21
C언어로 버블 정렬 구현하기  (0) 2019.02.01
C++ DAY5 Is-a관계  (0) 2018.03.14
C++ DAY4 const  (0) 2018.03.08
C++ DAY4 static method  (0) 2018.03.08

사이트의 정보

코딩하렴

으렴

활동하기