본문 바로가기
IT 컴퓨터_프로그램 /c++

클래스2

by 건축직일상 2015. 10. 1.

클래스 4대속성 - 은닉화, 캡슐화 , 상속성, 다형성


접근지정자 

private - 자기자신 클래스 내부에서만 접근이 가능하다

public - 내부와 외부 모두에서 접근이 가능하다

protected - 자기자신 클래스 내부와 상속을 받은 자식클래스 내부에서만 접근이 가능하다 


typedef struct tagInfo

{

//public:

int iTest;

}INFO;

class CInfo

{

private:

int m_iTest;

int m_iRenerCount;

private:

void IncreaseRenderCount()

{

++m_iRenderCount;

}

public:

void SetTest(int _iTest)

{

m_iTest = _iTest;

}

int GetTest(void)

{

return m_iTest;

}

void Render(void)

{

cout << m_iTest << endl;

IncreaseRenderCount();

}

public:

CInfo(void):m_iRenderCount(0){;} 

};


void main(void)

{

INFO    tInfo;

tInfo.iTest = 10;

CInfo    info;

//info.iTest = 20; 안됨

info.SetTest(20);

cout << info.GetTest() << endl;

}


클래스 내부멤버가 private 이라고 접근했을때 인터페이스 함수를 통한 접근을 했어야 했다


constructor( 생성자)

destructor(소멸자)


객체 선언과 동시에 멤버변수를 초기화 하고싶다면 생성자라는 문법을 사용해서 초기화 가능하다

생성자 - 객체가 생성될때 객체의 멤버변수를 초기화 할수있다

객체가 생성될때 자동으로 호출된다

객체가 생성될때 자동호출 임으로 반환값의 의미가 없다

함수의 이름이 클래스의 이름과 같아야 한다

객체가 생성이 될때 자동으로 호출되는 멤버함수를 생성자라고 한다


객체가 소멸할때 호출되는 멤버함수를 소멸자 라고 한다


생성자를 내가 정의 하지않아도 컴파일러가 자동으로 기본생성자를 제공해 주는것이다

default 생성자 라고 한다 

디폴트 생성자는 컴파일러가 생성해주긴하지만 / 생성자 오버로딩 문법으로 사용자 정의하면 

기본생성자를 사용하여 객체를 생성할수없다 


소멸자 - 객체의 메모리 반환을 위해 객체 소멸시 자동으로 호출된다

클래스 이름과 동일 . 이름앞에 ~ 붙음 . 반환형 ,리턴하는값 없음 인자는 void


1. 메모리생성 2. 생성자 3.소멸자 4. 메모리 반환

생성자는 메모리 동적할당을 하는 경우와 , 일반적으로객체 만들때 자동적으로 호출됨 

소멸자는 일반적으로 객체가 생성되고 지역이 종료되면 호출 

동적할당한 객체는 반드시 delete 를 해야 소멸자도 호출이 되는것이다


//기본생성자 , 기본복사생성자 , 대입연산자 , 소멸자 


class CObj

{

public:

CObj(void)

{

cout << " 기본생성자" << endl;

}//기본생성자 - 컴파일러가 만들지않아도 제공해줬던것

CObj(int i)

{

cout << "인자1개 생성자" << i << endl;

}

CObj(float f, int i ,double d){;}

~CObj(void)

{

cout << "소멸자 " << endl;

}

};

void main(void)

{

CObj*    pobj = new  CObj; //기본생성자만 호출

delete pobj; //소멸자 까지 호출

CObj obj(10); //생성자 ,소멸자 호출 

CObj*    pobj = new CObj(10);

delete pobj; // 생성자 소멸자 호출


//객체 배열

CObj obj[5]; //기본void 생성자 소멸자 5번 호출 


//클래스의 포인터 

//클래스포인터 배열형태

//stack 영역에 있는 포인터 변수를 10개만든것 . 동적할당은 아니다

CObj*    p = NULL;

CObj*    pArray[10]; // stack 공간 저장


for(int i = 0 ; i < 10; ++i)

{

pArray[i] = new CObj;

}    

//delete[] pArray; 이건 ㄴㄴ

for(int i = 0; i < 10; ++i)

{

delete pArray[i];

}

}

class CTest

{

private:

int i;

int j;

CTest(int i, int j)

{

this->i = i;

this->j = j;

}

};

//this 포인터  - 나자신의 주소를 반환하는 포인터 


'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글

깊은복사 얕은복사  (0) 2015.10.06
static  (0) 2015.10.06
함수 오버로딩  (0) 2015.10.05
const  (0) 2015.10.05
클래스1  (0) 2015.09.30

댓글