#include<iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////
//생성자 정리 1.
//1. 사용자가 만들지 않으면 컴파일러가 만들어준다.
// 인자가 없고 하는 일이 없는 생성자? (정말 하는 일이 없을까?)
//
//2. 하나의 생성자에서 다른 생성자를 호출 할 수 없다.!!
// C++ 2.0 (C++11 이라고 부름) 에서는 위임생성자라는 문법으로 가능함
//
//3. 생성자는 명시적으로 호출할수 없다! . 다만 placement new를 사용하여 가능하다.
//4. 소멸자는 명시적으로 호출할수 있다. 왜필요할까?! (수요일쯤강의..)
////////////////////////////////////////////////////////////////////////////////
/*
class Point{
int x;
int y;
public :
Point() {x=0;y=0;}
Point(int a, int b) {x=a;y=b;}
}
int main(){
Point p1;
Point p2(1,2);
}*/
//3//
////////////////////////////////////////////////////////
class Point{
int x;
int y;
public :
Point() {cout << "생성자 " <<endl;}
~Point() {cout<<" 소멸자 "<<endl;}
};
int main(){
Point p;
//p.Point(); // Error !! 생성자를 명시적으로 호출 할 수 없다.
new (&p) Point; // 생성자를 명시적으로 호출하는 기술!
//AKA : Placement new 라는 기술 입니다.
p.~Point(); // 된다!! 소멸자는 명시적으로 호출 할 수 있다.
}
//5. 객체 멤버의 생성자가 먼저호출되고 객체 자신의 생성자가 호출된다.
class Point{
int x;
int y;
public :
Point() {cout << "생성자 " <<endl;}
~Point() {cout<<" 소멸자 "<<endl;}
};
class Rect{
Point p1;
Point p2;
public :
Rect(){cout << "Rect()" << endl;}
};
int main(){
Rect r; //결과를 예측해봅시당
}
==================================================================================================
#include<iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////
// 주제 8. 초기화 리스트
//1. 개념 : 생성자 뒤에 : 을 적고 멤버를 초기화 하는 것.
//2. 장점 : 대입이 아니라 진짜 초기화이다. 객체 형 멤버가 있다면 초기화 속도가 빨라진다.
//3. 꼭 필요할때가 있다.
//////////////////////////////////////////////////////////////////////////////////////
/*
class Point {
int x;
int y;
public :
Point(int a =0, int b=0) : x(a),y(b) //여긴 초기화
{
//x=a; // 여긴 대입
//y=b;
}
};
int main(){
Point p(1,2);
// Object a = 0; // 초기화
// Object b;
// b=0; // 대입
}
*/
/*
//반드시 초기화 리스트로 해야 하는경우!
//(A) 클래스 내부에 const 나 참조 멤버가 있다면 초기화 리스트로 반드시 초기화 해야 한다.
class Point {
int x;
int y;
//int y=0; ////이때는 초기화가 안된다 왜냐하면 객체가 아직 생성되지 않았기 떄문에 메모리를 잡지 않았기 때문이다.
const int c;//단 반드시 초기화 리스트로 초기화 해야한다.
//const int c=0; // error 이다 때문에 생성자 안에서 대입연산으로 초기화 해주는것도 불가능하다. 반드시 초기화리스트를사용!
public :
Point(int a =0, int b=0) : x(a),y(b),c(0) //여긴 초기화
{
//x=a; // 여긴 대입
//y=b;
}
};
int main(){
//const int c; //error 반드시 초기화가 필요하다.
//
}*/
//(B) 디폴트 생성자가 없는 멤버를 객체로 가질떄 초기화 리스트에서 특정 생성자를 명시적으로 호출해야 한다.
class Point {
int x;
int y;
public :
Point(int a, int b){}//여긴 초기화
};
class Rect{
Point p1;
Point p2;
public: Rect(): p1(0,0),p2(0,0){}
};
int main(){
Rect r;
}
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]9.템플릿으로 알아보는 싱글톤 패턴 (0) | 2012.08.13 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의]8. 상수함수 이야기 (0) | 2012.08.13 |
[SSM 안드로이드 프레임워크 개발 강의]6. 객체 지향의 탄생 배경을 STACK 소스로 알아보기 (0) | 2012.08.13 |
[SSM 안드로이드 프레임워크 개발 강의 ] 5. 참조변수 편 (0) | 2012.08.13 |
[SSM 안드로이드 프레임워크 개발 강의 ] 4. C++ 캐스팅 (0) | 2012.08.13 |