메모리 함수

-> 메모리 vs 메모리 단위로 복사, 초기화를 수행하는 함수.

-> 메모리에 직접 접근하여 데이터를 다루기 때문에 속도가 빠르다.

 

#1. memset

-> 초기화 함수

-> 1byte 단위로 초기화를 진행한다.

-> 연속된 메모리를 사용하는 공간을 초기화할 때 사용한다.

void* _Dst : 초기화할 메모리의 시작 주소 전달

int _Val : 초기화할 값

size_t _size : 시작 주소부터 얼마만큼 크기를 초기화할 것인지 전달(byte단위)

int a;

     a = 0;

	memset(&a, 1, sizeof(int));		// 16843009
	// 0000 0001   0000 0001   0000 0001   0000 0001

 

memset(ptr, 0, sizeof(int) * 5);

int* ptr = new int[5];

for(int i = 0; i < 5; ++i)
{
 ptr[i] = 0;
}

여기서 memset과 for문은 서로 같다.

 

#2. memcpy

-> 메모리 복사 함수

void* _Dst : 복사 받을 메모리의 시작 주소

const void* _Src : 복사 할 메모리의 시작 주소

size_t _size : 얼마만큼 복사할 것인지 크기(byte단위)

 

int a = 0, b = 10;
	
memcpy(&a, &b, sizeof(int));
a = b;

여기서 memcpy는 a를 b에 대입한 것과 같다.

 

#3. memmove

-> 메모리 복사 함수

-> memcpy와 수행은 똑같다.

 

memcpy와 memmove의 차이점

memcpy memmove
표준이 아니다.
복사할 곳에 직접적으로 복사가 진행된다.
표준이다.
임시 버퍼를 통해 복사를 진행한다.

메모리가 겹칠 경우에는 memcpy 함수보다는 memmove를 사용해야한다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ 전방 선언  (0) 2020.09.13
C++ 생성자와 소멸자, explicit 키워드  (2) 2020.09.13
C++ 클래스, 클래스의 4대 속성  (1) 2020.09.10
C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ string  (0) 2020.09.08

절차 지향 프로그래밍

-> 동사구인 '~하다'에 중점을 둔 프로그래밍

-> 함수들이 각기 자신들의 기능을 절차에 의해 호출한다.

 

객체 지향 프로그래밍(OOP)

-> 객체에 중점을 둔 프로그래밍

 

 

객체 지향 프로그래밍의 특징

-> 상속을 통한 재 사용성을 보장한다.

-> 유지보수 및 관리가 용이하다.

 

 

Message Passing

-> 프로그래밍을 구성하는 객체간의 의사소통이다.

-> 의사 소통은 각 객체들이 가지고 있는 함수를 통해 이루어진다.

예)

#1 함수를 통해서 플레이어의 공격력을 얻어온다.. 

#2 함수를 통해서 몬스터한테 얻어온 공격력만큼 전달하여 체력을 감소시킨다.

 

클래스란?

-> C++부터 등장한 사용자 정의 자료형

-> 변수와 데이터를 다루는 기능을 하나로 묶어 놓은 것이다.

-> 객체들을 추상화시킨 하나의 틀이다.

 

프로그래밍에서 객체란?

-> 클래스는 사용자 정의 자료형

-> 클래스에 변수명을 부여해서 메모리에 등록시키면 객체가 된다.

-> 메모리에 등록된 클래스는 Instance라고도 부른다.

 

추상화란?

-> 공통된 요소들을 추출하는 작업

class CCar
{
public:
	// 멤버 함수
	void Move()
	{
		cout << m_szName << "이(가) " << m_iSpeed << "속도로 움직입니다." << endl;
	}

public:
	// 멤버 변수
	// m_ : 멤버를 뜻하는 헝가리안 표기법
	char	m_szName[16];
	int		m_iSpeed;
};

struct tagCar
{
private:
	// C++부터 구조체도 멤버함수를 지닐 수 있다!
	void Move()
	{
		cout << m_szName << "이(가) " << m_iSpeed << "속도로 움직입니다." << endl;
	}

	char	m_szName[16];
	int		m_iSpeed;
};

 

멤버 접근 지정자

-> 멤버에 접근할 수 있는 권한을 뜻한다.

 

#1. private

-> 멤버 접근을 오로지 내부에서만 허용한다.

 

#2. public

-> 멤버 접근을 내/외부 모두 허용한다.

 

#3. protected

-> 멤버 접근을 내부 혹은 상속 관계에서만 허용한다.

 

클래스와 구조체의 차이점

#1. 멤버 접근 지정자의 차이점

클래스 : private

구조체 : public

 

그 외의 모든 기능들이 동일하다.

-> 즉, 멤버 접근 지정자 외에는 차이점은 없다.

 

클래스와 구조체의 차이점이 없는 상황에서 구조체 멤버로 함수를 정의하지 않는다.

-> 구조체는 순전히 데이터 덩어리 용도로만 사용한다.

 

클래스의 4대 속성

-> 클래스를 구성하는 속성들

 

#1. 은닉화

-> 멤버 변수를 숨긴다는 의미

-> 기본 멤버 접근 지정자를 private으로 두면서 외부로부터 원치않는 데이터 변경을 막는다.

-> 데이터 보호

 

은닉화를 도모하지 않을 경우 원치 않는 데이터로 변경될 가능성이 있다.

 

은닉화된 데이터를 다루는 방법

-> Get/Set 함수를 사용.

 

Get함수 : 데이터를 읽는 용도

Set함수 : 데이터를 쓰는 용도

 

 

#2. 캡슐화

-> 데이터와 데이터를 다루는 기능을 하나로 묶어 놓는다.

-> 내부가 어떻게 구성되었는지 보다는 기능이 중요하다.

 

예를 들어 정해진 순서의 세 가지의 함수를 순서대로 실행시키는 경우가 발생 하였을 때.

class A
{
pulic:
    void Take()
    {
     코드라인
    }
};

class B
{
pulic:
    void Take()
    {
     코드라인
    }
};

class C
{
pulic:
    void Take()
    {
     코드라인
    }
};

void main()
{
   A();
   B();
   C(); 
}

순서가 A -> B -> C가 아니고 B -> A -> C 이런식으로 섞이는 경우가 생길 수가 있다.

캡슐화로 이런 경우가 발생하는 것을 막을 수 있다.

class D
{
public:
	void Take()
	{
		A.Take();
		B.Take();
		C.Take();
	}
    


void main()
{
  D.Take();  
}

 

#3. 상속성

-> 클래스끼리 공통된 데이터를 필요로 한다면 상속을 통해 불러올 수 있다.

-> 부모 클래스는 자식 클래스들의 공통된 요소를 추출한 추상적인 존재가 된다.

 

 

#4. 다형성

-> 각기 다른 객체가 동일한 메세지를 통해 각기 다른 기능을 수행한다.

-> 상속과 맞물려 있기 때문에 상속을 어느정도 자유자재로 다룰 수 있으면 다형성은 쉽게 사용할 수 있다.

 

 

클래스의 파일분할
-> cpp에 정의부를 구현할 경우 어떤 클래스의 멤버 함수인지를 명시해주어야 한다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ 생성자와 소멸자, explicit 키워드  (2) 2020.09.13
C++ 메모리 함수  (0) 2020.09.13
C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ string  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08

F5 : 디버깅 시작/재시작
쉬프트 + F5 : 디버깅 종료
F9 : 중단점 설정/해제
F10 : 다음 코드 라인으로 이동
F11 : 다음 수행 라인으로 이동
컨트롤 + 쉬프트 + F9 : 모든 중단점 삭제

 

#1. 조건식을 통해서 디버깅을 하는 방법

 

#2. 마우스로 변수를 더블클릭 한 후 끌어다가 조사식에 올려서 값을 확인하는 방법

모든 컴파일러 경고는 반드시 고치는 것이 좋다.

'Programming > C++ Basic' 카테고리의 다른 글

C++ 메모리 함수  (0) 2020.09.13
C++ 클래스, 클래스의 4대 속성  (1) 2020.09.10
C++ string  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08

string

-> 클래스 문법으로 만들어진 것

-> 문자를 다루는데 있어 편리하게 사용할 수 있도록 도와줌

-> string을 사용하기 위해서는 #include <string>을 명시해줘야한다.

string	str1;
string	str2 = "Hello";
string	str3("World");


char*	pStr = str2;	           // 불가능
const char* pStr = str2.c_str();   // 가능

 

string의 길이 확인

cout << str2.length() << endl;

 

sizeof를 통해 string의 크기를 확인하면 다음과 같이 28이란 값이 나온다.

하지만 string은 문자열에 저장된 포인터 일 뿐이며 string의 길이는 sizeof (string)에 영향을주지 않는다고 한다.

 

string 끼리 비교

str2 = str3; 
cout << (str2 == str3) << endl; 
cout << (str2 != str3) << endl;

 

문자열 결합

str1 = str2 + str3; 
str2 += str3; 
str1 = str2 + "World";

 

문자열 복사

str1 = str2;

 

 

'Programming > C++ Basic' 카테고리의 다른 글

C++ 클래스, 클래스의 4대 속성  (1) 2020.09.10
C++ Debug, 조건식 Debug  (0) 2020.09.08
C++ 레퍼런스 자료형  (0) 2020.09.08
C++ 파일 분할(.cpp, .h)  (0) 2020.09.08
C++ 조건부 컴파일(#if, #ifdef, #ifndef 등)  (0) 2020.09.07

+ Recent posts