Day03-01. 생성자. 복사생성자
C,C++/CONCEPT 2018. 3. 7. 16:45 |절차지향적 - 혼자서
객체지향적 - 여러사람, 확장성, 유지보수좋음
'사람이 정의한' 현실 세계에 존재하는 모든 것을 객체로 정의
Class A{
member variable // == field
// 복사 생성자
// 생성자 함수
// 소멸자
// 대입연산자 함수
// 외부 함수
member function // == method
}
클래스 밖에 있는 함수를 외부함수로 칭함. main도 외부 함수
1. 생성자 함수
1-1. 객체 등록시 자동호출이 되어지는 함수
역할 : 객체필드 초기화 (쓰레기 값 방지), 객체 등록 (디폴트)
1-2. 접근지정자를 주로 public으로 지정
1-3. 오버로딩이 가능하다 (명시적 + 암시적)
1-4. const 멤버함수로 만들 수 없다
1-5. 리턴타입이 없다
1-6. 함수이름이 클래스이름과 동일하다
1-7. 디폴트 생성자 함수는 생성자 함수를 명시적으로 제공하지 않을 경우에만 제공된다
2. 복사생성자 함수
2-1. 객체 생성시 매개변수로 객체를 넘겨줄 경우
2-2. 객체 생성시 객체를 대입할 경우
2-3. 멤버 함수의 매개변수로 객체를 선언할 경우
2-4. 멤버함수에서 객체를 리턴할 경우
* 얕은 복사, 깊은복사
// defalut는 얕은 복사
// 깊은복사는 개발자가 직접코딩해야한다 (필드를 포인터로 사용할때)
* this를 쓰는이유
: 객체를 구별하기 위해
// 1. 지역변수와 필드명이 같을때
// 2. 메소드에서 자기자신을 리턴할때
// return this는 반복적으로 어떤일을 할때
// 자기자신을 가리키는 객체포인터
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 31 32 33 34 35 36 | #include <iostream> using namespace std; class A { int *p; public: A(int i = 0) { p = new int; *p = i; } ~A() { delete p; // 메모리 공간을 아끼기위해서 } A (const A& aa) { p = new int; *p = aa.p; } int getP() {return *p;} }; void main() { A aa(10); A bb(aa); // 복사생성자 호출 cout<<bb.getP()<<endl; } | cs |
'C,C++ > CONCEPT' 카테고리의 다른 글
Day04-02 (0) | 2018.03.08 |
---|---|
Day04-01 (0) | 2018.03.08 |
Day03-02. 생성자, 복사생성자 호출 (0) | 2018.03.07 |
Day03-03. 생성자와 소멸자의 개념 (0) | 2018.03.07 |
Day03-05. 생성자함수, 복사생성자함수, 소멸자함수 호출순서 (0) | 2018.03.07 |