- 음악과 나 -/『 짬 통 』

5월 2일 간단히. C++

noon2dy 2006. 5. 3. 16:29

 

//////////////////////////////////////////////////
//////////////////////////////////////////////////
// 2006년 5월 2일 여섯시 즈음.~

 

이제 C++과 MFC로 들어가야지.  따라와~~ 빨리와~~.. ~ -_- ㅎ

왜안와~~ ㅋ


" C 와 C++ " 의 개념적 차이..;

 

C에서는 함수가 프로그램을 이루는 기본단위..
함수는 어떤 ''기능''을 수행함.

 

=> C스타일로 프로그램을 작성할 때는 먼저
 전체 프로그램을 기능적인 측면에서 작은 단위로 나누고,
 각각의 세분된 기능을 < 함수 > 로 구현하면된다~!
 소형, 중형 프로그램 작성에 적합.

 

C++에서는 ''클래스''가 프로그램을 이루는 기본단위다.

 

=> 함수를 이용하여 프로그램이 수행해야 할 기능을 만들듯이,
 클래스를 이용하면 오브젝트를 표현할 수 있다..( 무슨말 ? ㅎㅎ)

 

=> 객체 지향적으로 프로그램을 작성할때는,
 기능적인 측면에서 세분하는것이 아니라,
 프로그램을 구성하는 오브젝트 단위로 세분함.
 ( 프로그램이 어떤 오브젝트로 구성되어있는지.. )
 그다음, 각각의 오브젝트를 < 클래스 > 로 구현.
 대형 프로그램 작성에 적합.

 

 

캡슐화:

 

C에선?

=> 관련있는 변수들을 한데 묶어 줌으로써
 변수들을 보다 일괄적으로 관리한다는것.. ( 구조체. )
 외부의 함수에 의해 수동적으로 제어된다..

 

C++ 에선?

=> 처리, 및 관리하는 함수까지 한데 묶어버림으로,
 관련된 모든 기능을 한 클래스 내에서 일괄적으로 수행하도록 해줌.
 내부의 함수를 통해 능동적으로 동작한다.

클래스 사용하기위해.

 

1. 클래스의 선언
2. 클래스 구현
3. 클래스 사용


=> 클래스 선언 : *.h파일에 따로 저장

class Point {

public :
 // 멤버 변수
 int m_nX;
 int m_nY;

 // 멤버 함수
 void SetPosition( int nX , int nY );
 void Move( int nX , int nY );
 void Show();
};

 

=> 클래스의 구현 ( =클래스의 멤버함수를 기술해주는것. ) : *.cpp 파일로 저장

->
void Point::SetPosition( int nX , int nY )
{
 m_nX = nX;
 m_nY = nY;
}

->
void Point::Move( int nX , int nY )
{
 m_nX += nX;
 m_nX += nY;
}

->
void Point::Show()
{
 cout << "X=" << m_nX << " Y=" << m_nY << "\n";
}


클래스의 사용

 

=> 인스턴스( = 메모리에 생성된 클래스의 실체 -_- )를 생성하여 사용.
 우리가 사용하는 메모장 프로그램은, 엄밀히 말하면 '메모장 프로그램'이 아니라
 '메모장 프로그램의 인스턴스'라고해야 정확한것이다.. 

 

Point a, b; 후에

a.m_nX = 30;
a.Move( 20 , 30 ); 등으로 사용... 흠..


// Point.h: interface for the Point class.
//
//////////////////////////////////////////////////////////////////////

 

#if !defined(AFX_POINT_H__64866C55_77C9_42D6_BA0C_BB060051C363__INCLUDED_)
#define AFX_POINT_H__64866C55_77C9_42D6_BA0C_BB060051C363__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

 

class Point 
{
public:
 // 멤버 함수
 void SetPosition(int nX, int nY);
 void Move(int nX, int nY);
 virtual void Show();

 // 멤버 변수
 int m_nX, m_nY;
};

 

#endif // !defined(AFX_POINT_H__64866C55_77C9_42D6_BA0C_BB060051C363__INCLUDED_)

 

 

///////////////////////////
// Point.cpp 파일..

 

#include "Point.h"

 

void main()
{
 // 인스턴스 생성
 Point myPosition, yourPosition;

 

 // 변수 값 초기화
 myPosition.SetPosition(10, 30);
 yourPosition.SetPosition(50, 30);

 

 // 좌표 변경 (점의 위치 이동)
 myPosition.Move(20, 50);
 yourPosition.Move(30, 40);

 

 // 현재 좌표 출력
 myPosition.Show( );
 yourPosition.Show( );
}

 

=> 두개의 인스턴스( myPosition, yourPosition ) 선언.
 각각의 인스턴스에대해 '멤버 변수'를 저장하기위한 공간이 만들어짐
 따라서 각 인스턴스엔 서로 다른 데이터를 저장할 수 있게 된다.

 but, '멤버 함수'는 인스턴스마다 각각 생성되는게 아니라
 한 클래스의 모든 인스턴스가 같은 멤버함수를 공유하게된다.

 

 -> myPosition.m_nX 와 yourPosition.m_nX는 서로 독립적으로존재하는변수이다.


캡슐화 된 데이터 감추기

public: protected: private:

 

=> public으로 선언된 변수는 외부에서 보이는 변수
 protected나 private로 선언된 변수는 내부적으로만 사용할 수 있음.
 ( 클래스 내부에서만 사용되는 변수다. )

 

class Point 
{
public:
 // 멤버 함수
 void SetPosition(int nX, int nY);
 void Move(int nX, int nY);
 virtual void Show();

protected:
 // 멤버 변수
 int m_nX, m_nY;
};

라고 해놓고,

void main()
{
 Point myPosition;
 myPosition.SetPosition( 10, 20 ); // 문법적으로 이상이 없음.
 myPosition.m_nX += 20;
}

 

 

..

'- 음악과 나 - > 『 짬 통 』' 카테고리의 다른 글

About, Dr. Mac  (0) 2006.05.05
배낭 채우기 알고리즘...  (0) 2006.05.05
치코치코v1완성 - 쌤쌤블록버스터!  (0) 2006.05.02
치코치코 v1  (0) 2006.04.28
전체화면 만들기.  (0) 2006.04.21