Software Development/C, C++ 48

[C++] 클래스(Class)와 객체(Object)

C++의 구조체 : http://huiyu.tistory.com/entry/C-C%EC%97%90%EC%84%9C%EC%9D%98-%EA%B5%AC%EC%A1%B0%EC%B2%B4?category=463903 - C++의 구조체는 클래스의 일종이다, 그러나 클래스와 구조체는 차이점을 갖고 있다. - 클래스와 구조체의 차이점 : 키워드 struct를 대신해서 class를 사용한다면, 구조체가 아닌 클래스가 된다. [구조체]1234567891011121314151617181920212223struct Car{ char gamerID[ID_LEN]; int fuelGaunge; int curSpeed; void SHowCartState() { ... } void Accel() { ... } void Break..

[C++] C++에서의 구조체

- 구조체란? : 구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치 C언어에서의 구조체 변수 선언 struct Car basicCar; struct Car simpleCar; -> 키워드 struct는 이어서 선언되는 자료형이 구조체를 기반으로 정의된 자료형임을 나타낸다.그러나 c++에서는 일반 변수와 같이 선언한다. Car basicCar; Car simpleCar; - 구조체 안에 함수 삽입 : C++에서는 구조체 안에 종속적인 함수들을 삽입하는 것이 허용된다. * 구조체에 종속적인 함수들은 구조체에 넣을 수 있다.123456789101112131415161718struct Car{ char gamerID[ID_LEN]; int fuelGaunge; int curSpeed; void SHowCa..

[C++] 참조자(Reference)와 함수

* Call-by-value & Call-by-reference - Call-by-value : 값을 인자로 전달하는 함수의 호출방식 - Call-by-reference : 주소 값을 인자로 전달하는 함수의 호출방식 - Call-by-value 함수 12345int Adder(int num1, int num2){ return num1+num2;} cs Call-by-value의 형태로 정의된 함수의 내부에서는, 함수외부에 선언된. 변수에 접근이 불가능하다. 따라서 두 변수에 저장된 값을 서로 바꿔서 저장할 목적으로 다음과 같이 함수를 정의하면 원하는 결과를 얻을 수 없다.123456789101112131415161718192021#include using namespace std; void SwapByV..

[C++] 참조자(Reference)의 이해

- 변수 : 변수는 할당된 메모리 공간에 붙여진 이름이다. 그리고 그 이름을 통해서 해당 메모리 공간에 접근 가능하다. 할당된 하나의 메모리 공간에 둘 이상의 이름을 부여할 수는 없을까? -> int &num2 = num1;* 위 코드는 num1이라는 이름이 붙어있는 메모리 공간에 num2라는 이름이 하나 더 붙게 된다. int *ptr = &num1; // 변수 num1의 주소 값을 반환해서 포인터 ptr에 저장 int &num2 = num,1; // 변수 num1에 대한 참조자 num2를 선언-> num2는 num1에 대한 '참조자'가 되며, num1이라는 메모리 공간에 num2라는 이름이 하나 더 붙은 꼴이 된다. 12345678910111213141516#include using namespace..

[C++] namespace & using

namespace : 말 그대로 특정 영역에 이름을 붙여주기 위한 문법적인 요소, 함수의 소속을 구분해주는 역할을 한다.같은 이름을 가진 함수나 변수더라도 소속, namespace에 따라 구분이 될 수 있다.1234567891011121314151617181920212223242526272829#include namespace BestComImpl{ void SimpleFunc(void);} namespace ProgComImpl{ void SimpleFunc(void);} int main(void){ BestComImpl::SimpleFunc(); ProgComImpl::SimpleFunc();} void BestComImpl::SimpleFunc(void){ std::cout

[C++] 인라인(inline) 함수

inline함수 -> 프로그램 코드라인 안으로 들어가 버린 함수 1. 매크로함수 장점 - 일반적인 함수에 비해 실행속도의 이점이 있다. - 단순 치환만 해주므로 인수타입을 신경쓰지 않아도 된다. - 여러개의 명령문을 동시에 포함할 수 있다. 단점 - 정의하기 어렵다. 복작한 함수를 매크로 형태로 정의하는데 한계가 있다.1234567#include #define SQUARE(X) ((X)*(X))int main(void){ std::cout

[C++] 함수 오버로딩과 매개변수의 디폴트 값

1. 함수 오버로딩 (Function Overloading)1234567891011121314151617181920#include int MyFunc(int num){ num++; return num;} int MyFunc(int a, int b){ return a+b;} int main(void){ MyFunc(20);// MyFunc(int num)함수 호출 MyFunc(30, 40); //MyFunc(int a, int b) 함수 return 0;}Colored by Color Scriptercs C언어에선 위와 같이 동일한 함수가 정의된다면 컴파일 오류가 발생한다. 그러나 C++에선 이를 허용하고 있으며, 이러한 형태의 함수정의를 가리켜 '함수 오버로딩(Function Overloading)'이라..

[C++] cin, cout을 이용한 입출력

1. Hello World 출력 샘플1234567891011#include int main(void){ int num=20; std::cout C++에선 데이터의 입력도 데이터의 출력과 마찬가지로 별도의 포맷 지정이 필요없다.(2) C++의 지역변수 선언 -> C언어 프로그램을 작성하는 경우 함수를 정의함에 있어 지역변수 선언이 항상 제일 먼저 등장했어야만 했다. 그러나 C++의 지역변수 선언은 함수 내 어디든 삽입이 가능for문의 초기화 문장 내에서 변수 선언이 가능하다. for(int num=0; num; num++){...} * C언어도 새로운 표준에서는 C++ 과 마찬가지로 변수선언의 위치에 제한을 두지 않는다. 그러나 아직도 대부분 컴파일러는 이를 허용하지 않는다. (3) 데이터의 연속 입력 :..

C언어로 게임만들기 - 5. 첫번째 게임_5)코드정리

이제 구현한 게임을 상황(State)에 맞게 나눠 대기상태->게임상태->게임종료로 나눠야 하는데요, 그전에 코드를 조금 정리하고 진행하도록 하겠습니다.게임전체 코드를 아래와 같이 헤더를 분리하고 함수별로 나눴습니다.game.h12345678910111213141516171819202122232425262728293031char PLAYER_STR[] = "└─●─┘";typedef struct Position{ int x, y;}Position; typedef struct Player{ Position position; Position center; char *strPlayer;// = "└─●─┘";//주인공 캐릭터 int nLength; //주인공 캐릭터 전체 길이}Player; typedef str..

C언어로 게임만들기 - 5. 첫번째 게임_4)충돌처리

이제 게임에서 충돌처리를 구현합니다.공과 골대의 충돌처리를 통해 스코어를 낼 수 있게 처리하면 됩니다. 먼저, 공과 골대의 충돌을 구현하기 전에 Player의 양 옆에 경계 이상으로 넘어가지 않도록 처리합니다.1234567891011121314151617181920void KeyProcess(int key){ int remain; switch (key) { case 'j': if (g_Player.position.x = GAME_MAX_WIDTH) break; g_Player.position.x++; .... break; case'k': .... break; }}Colored by Color Scriptercsj키(왼쪽)로 이동할땐 0보다 작아진 경우 더 이상 이동하지 않게 처리하고, l키(오른쪽)로 이..