본문 바로가기

c++125

C++ 10 [참조변수] ▣ & : 참조자 ▣ Player& p1 = player; : 참조변수 선언 및 초기화 ▣ Player& p1; : 참조변수는 선언할 때 초기화를 같이 진행해야 한다 그렇지 않으면 컴파일 오류 ▣ p1.lvUp(10); : 참조변수는 일반변수처럼 사용 가능해서 포인터처럼 -> 이 아닌 . 으로 접근 ▣ 값을 접근할 때 참조변수는 *p 포인터처럼 값을 접근할 때 마다 *를 붙이지 않아도 된다. 2023. 4. 4.
C++ 09 [call by value, call by reference] ▣ 변수나 객체를 매개변수로 전달하면 값에 의한 호출이 된다. ▣ 객체를 매개변수로 값을 전달하면 객체가 복사되어서 전달하기 때문에 전달한 함수에서 객체의 값을 바꾸어도 원본에는 지장이 없다. ▣ 매개변수 객체의 생성자는 호출되지 않고 소멸자만 컴파일에 의해 호출되고 소멸된다. ▣ 객체의 주소로 매개변수를 전달하면 주소의 의한 호출이 된다. ▣ 객체의 주소를 전달했기 때문에 호출된 함수에서 값을 변경하면 원본객체에 영향을 준다. ▣ 객체의 주소로 매개변수를 전달해도 원본 객체의 생성자와 소멸자만 호출된다. 2023. 3. 28.
C++ 08 [string] ▣ string 클래스를 사용을 사용하기 위해서는 #include 헤더가 있어야 한다. ▣ string str(문자열) : 괄호를 통해 초기화 가능 ▣ string *p = new string(문자열) : 메모리 할당으로 string 객체 사용 가능 ▣ string에 속해 있는 getline() 함수 ▣ getline(cin, str, '\n') : getline(cin, 입력받을 객체, 구분문자(구분문자까지 입력)) ▣ str2 = str1 : 대입연산자를 통해서 문자열을 치환(대입)해서 바꿀 수 있다. ▣ 대표적인 string 함수들 객체.append(연결 문자) : 문자열 연결 함수 반환형 객체.length() : 문자열 길이 함수 stoi(객체) : 숫자로 된 문자열을 숫자로 변환 함수 객체.cl.. 2023. 3. 28.
C++ 07 [this 포인터] ▣ this 포인터 : 객체 자신에 주소 포인터 ▣ this->num 코드는 test객체의 포인터(클래스 Test의 int num = 0)를 접근하여 대입 ▣ 클래스의 멤버함수와 생성자함수에서만 this 사용이 가능하다. ▣ 멤버변수와 멤버함수의 매개변수의 이름이 동일할 때 this로 객체 자신을 접근하여 사용한다. ▣ 멤버 함수에서 자신의 주소를 리턴해야 할 때 사용한다. ▣ this는 정적 멤버함수(static 함수)에서는 this를 사용할 수 없다. ▣ 멤버함수에서 객체의 주소를 this로 접근이 가능하다. ▣ 위에 코드를 풀어서 작성하면 이렇게 test.testfunc(&test, 10);처럼 주소를 매개변수로 전달하고 컴파일러가 void testfunc(Test* this, int num) 코드.. 2023. 3. 24.
C++ 06 [메모리 할당] https://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EB%A9%94%EB%AA%A8%EB%A6%AC_%ED%95%A0%EB%8B%B9 동적 메모리 할당 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 동적 메모리 할당 또는 메모리 동적 할당은 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 사용이 끝나면 운영체제가 쓸 ko.wikipedia.org ▣ 메모리 할당 : 필요한 메모리를 힙이라는 메모리 영역에서 가져와 사용하는 것 ▣ 동적메모리 : 상황에 따라 원하는 크기만큼의 메모리가 할당 가능 ▣ 정적메모리 : 메모리의 크기가 코딩되어 있어서 나중에 조절할 수 없다. ▣ 메모리 할당 방법 : 데이터타입 *포인터이.. 2023. 3. 24.
C++ 05 [객체배열] ▣ 객체배열 만들기 : 클래스이름 배열이름[크기]; ▣ 객체배열을 초기화하는 방법 : 클래스이름 배열이름[크기] = { 클래스이름(), 클래스이름(값)}; ▣ 객체배열 인덱스 수만큼 초기화를 해야 한다. ▣ Test() : 매개변수가 없는 생성자 호출 ▣ Test(10) : 매개변수가 있는 생성자 호출 ▣ 소멸자는 큰 숫자 인덱스부터 소멸한다. 그렇기 때문에 매개변수가 있는 소멸자가 먼저 호출되었다. 2023. 3. 24.
C++ 04 [인라인 함수] https://namu.wiki/w/%EC%98%A4%EB%B2%84%ED%97%A4%EB%93%9C 오버헤드 - 나무위키 이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권 namu.wiki ▣ 오버헤드 : 어떤 명령어를 처리하는데 소비되는 간접적, 추가적 컴퓨터 자원 ▣ 함수 호출 오버헤드 : 함수 호출에 따른 시간흐름 ▣ sum함수를 호출할 때 num1+num2 연산을 하는 시간보다 함수를 호출하는 시간, 리턴에 따른 시간이 더 많이 들어간다. 그렇기 때문에 짧은 코드 함수는 인라인 함수를 사용하면 속도해야 처리속도라 빨라진다. ▣ 인라인함수.. 2023. 3. 22.
10진, 2진수 바꾸기 ▣ 10진수를 2진수로 바꾸기 위해서는 나누기 연산을 진행해야 합니다. 위에 있는 방법처럼 2를 나누어 나눈 나머지와 나눈 값들을 하나하나 나열하여 작성합니다. 그리고 화살표 방향 순서대로 보면 그게 2진수입니다. ▣ 2진수를 10진수로 바꾸는 방법은 1,2,4,8,16,32,64,128,256,512... 이런 식으로 2에 몇 승에 값들을 2진수 위에 숫자를 나열하여 계산해야 합니다. 2진수 위에 2에 몇 승에 대한 값을 나열을 하고 0이 아닌 1인 부분에 값을 다 더하게 되면 10진수가 됩니다. 2023. 3. 21.
C++ 03 [클래스, 멤버변수, 멤버함수, 생성자, 소멸자, 접근지정자] ▣ 클래스 : 설계도, 틀 ▣ 객체 : 설계도로 생성된 완성품 ▣ 클래스 선언 : class 클래스이름 { }; , class 키워드를 앞에 붙여야 한다. ▣ 멤버변수 : 클래스내부에서 선언하는 변수 ▣ 멤버함수 : 반환형 클래스이름::멤버함수이름(매개변수){ } 순으로 생성한다. , (::)는 범위지정연산자 ▣ 접근지정자 : public: 클래스 내부, 외부 모두 접근이 가능한 접근지정자 ▣ 객체생성 : 클래스이름(자료형) 변수이름;으로 지정한다. 구조체를 생성하는 것과 동일하다. ▣ p1.Damage(50); 객체에 접근할 때에는. 점을 사용한다. ▣ 생성자 : 객체가 생성될 때 자동으로 한번 호출되는 함수, 생성자는 클래스 이름과 동일하게 작성해야 한다. 생성자는 리턴 타입 반환형을 선언하지 않는다.. 2023. 3. 10.
유니티 [2D 물리경계선수정, 타일맵 대각선경계선수정] ▣ 안녕하세요. 2D로 게임을 제작하면서 대각선으로 된 스프라이트 오브젝트에 콜라이더를 다룰 때 어려움이 있습니다. 그리고 물리경계가 대각선이다 보니 타일맵으로 맵을 그리고 콜라이더를 추가할 때에도 스프라이트 외부로 콜라이더 나와서 콜라이더 경계가 이미지를 벗어나서 불편함이 있습니다. 그럴 때 이렇게 하시면 됩니다. ▣ 먼저 수정할 스프라이트를 클릭하고 Sprite Editor 메뉴로 갑니다. 그리고 Sprite Editor를 Custom Phsics Shape로 클릭하여 선택합니다. ▣ 그리고 수정할 이미지를 클릭하고 Generate를 클릭하게 되면 물리경계선이 보이게 됩니다. ▣ 네모모양을 이동해서 경계선을 수정한 다음에 Apply를 해서 저장합니다. ▣ 그런 다음에 스프라이트를 씬에 옮겨서 Poly.. 2023. 3. 8.
C++ 02 [string, cin.getline(), width(), std::right, 정렬] ▣ : C언어 헤더는 c로 시작한다, C언어 string헤더 ▣ strcpy() : string을 복사하는 함수 ▣ : C++ string클래스 헤더파일 ▣ string : C++표준 라이브러리에서 제공하는 string클래스, 배열과 다르게 메모리 크기 제약이 없다., 쉽게 사용가능 ▣ getline() : 공백을 포함해서 입력받는 함수, getline(cin, 버퍼) ▣ cin.getline() : 공백을 포함한 지정한 문자까지 입력, getline(버퍼, 메모리크기, 입력받을 끝 문자) ▣ cin >> str >> str2 : 동시입력이 가능하다. ▣ cout.width() : 출력간격 ▣ std::right, std::left : 오른쪽정렬, 왼쪽정렬 2023. 3. 3.
C++ 01 [시작, 역사, 특징, 컴파일, 링킹, 디버깅, cout, cin, namespace] ▣ 소프트웨어 : 컴퓨터 프로그램과 데이터를 총칭하는 용어이다. ▣ 프로그래밍 : 컴퓨터가 처리할 작업 ▣ 프로그래밍 언어 : 컴퓨터 언어 https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D 컴퓨터 프로그래밍 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍(영어: computer programming) 또는 간단히 프로그래밍(programming, 문화어: 프로그램 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 ko.wikipedia.org ▣ 1972년 C언어 ▣ 1983년 C++ ▣ 1995년 Java ▣ .. 2023. 2. 28.
언리얼엔진5 34장 [Default Land Movement Mode, Set Movement Mode] ▣ 안녕하세요. 이번장에서는 Default Land Movement Mode에 대해 공부해 보겠습니다. 저번장이랑 중복되는 부분이 있습니다. ▣ 먼저 저번장에서 만들었던 Player를 사용하겠습니다. Player는 캐릭터컨트롤러로 생성합니다. ▣ Player에 모양과 카메라위치도 지정합니다. ▣ Prjoect Settings에 Input에 Axis Mappings에 두 개를 생성합니다. W키, S키를 누를 때의 입력, A, D 키를 누를 때의 입력을 각각 생성합니다. ▣ Player에 Event Graph로 들어가서 위에 이미지처럼 코드를 완성합니다. Get Actor Forward Vector함수는 방향에 대한 함수입니다. Add Movement Input함수는 Character Movement를 사용.. 2023. 2. 23.
C++ [가상함수] ▣ 기본클래스, 파생클래스를 선언하고 각각 멤버함수를 선언합니다. 멤버함수의 이름은 동일하게 선언합니다. 그리고 메인함수에서 GameManager 객체의 포인터, Player 객체의 포인터를 각각 정의하고 위에 코드처럼 GameMaanger클래스의 주소로 접근하여 멤버함수를 호출하는 코드, Player클래스의 주소를 pGameManager 함수에 대입하여 멤버함수를 호출하는 코드를 작성합니다. ▣ 디버그를 해보면 둘 다 GameManager 클래스의 멤버함수가 호출되는 걸 확인할 수 있습니다. ▣ 그 이유는 정적바인딩으로 컴파일할 때 호출될 함수의 주소가 이미 결정해 버렸기 때문에 pGameManager = pPlayer; 이렇게 코드를 작성하더라도 부모의 함수가 호출됩니다. ▣ 이럴 때 가상함수(Vir.. 2023. 2. 22.
C++ [오버라이드] ▣ 먼저 GameManager 클래스를 선언하고 GameManager에 멤버변수, 함수를 지정합니다. Player라는 파생 클래스도 선언하고 멤버변수를 선언합니다. ▣ 그리고 Player의 객체를 p로 정의하고 p에서 Show() 멤버함수를 호출합니다. 그럼 기본클래스인 GameManager에 멤버함수 Show()가 호출됩니다. ▣ 코드를 추가해서 Player 파생클래스에 멤버함수로 기본클래스에 있던 멤버함수랑 동일한 이름으로 Show()라는 멤버함수를 선언합니다. 그리고 다시 p.show() 함수를 호출하면 위에 이미지처럼 기본클래스의 멤버함수가 아닌 파생클래스의 멤버함수가 호출됩니다. 이걸 오버라이드라고 합니다. ▣ 다시 정리하면 파생클래스가 기본클래스 함수를 대신 호출되는 걸 오버라이드라고 합니다. 2023. 2. 22.
언리얼엔진5 33장 [마우스 회전] ▣ 안녕하세요. 이번장에서는 마우스회전 블루프린트를 공부해 보겠습니다. ▣ 저번장에서 사용했던 Player를 사용하겠습니다. Player는 플레이어컨트롤러입니다. ▣ 먼저 Edit메뉴에 Project Settings를 클릭하고 ▣ Input 메뉴에서 Axis Mappings를 추가합니다. MoveMouseX, MoveMouseY라는 이름으로 두 개를 추가하고 각각 입력을 Mouse X, Mouse Y로 지정합니다. ▣ 그리고 Player Event Graph에서 위에 있는 이미지처럼 블루프린트를 완성합니다. 아까 만들었던 MouseX, MouseY Axis를 불러오고 Add Controller Input 회전함수를 가져옵니다. 여기서 중요한 건 왜 Pich와 Yaw를 사용하는지 잘 이해하기 어렵습니다. .. 2023. 2. 21.
C++ [클래스 상속] ▣ 파생클래스를 만들기 위해서는 class State : public Player class 파생클래스명 : 접근연산자 부모클래스이름 위에 있는 형식으로 작성해주시면 됩니다. ▣ state 객체에서 show() 함수를 호출하는데 show() 함수에는 Player에 level, hp 멤버변수를 사용할 수 있습니다. ▣ Player에 객체를 생성해서 p1. 접근을 하려고 하면 level 만 접근할 수 있습니다. ▣ public은 외부에서든 내부에서든 자식 클래스에서든 모두 접근이 가능합니다. private는 외부 접근이 불가능하고 내부 자기 자신에서만 접근이 가능합니다. protected는 외부에서는 접근이 불가능하지만 상속 관계만 접근이 가능합니다. 그렇기 때문에 public접근연산자인 level만 접근할.. 2023. 2. 16.
Visual Studio 컴파일 오류 해결방법 ▣ 윈도키를 클릭하고 cmd를 검색하면 명령 프롬프트가 나옵니다. 클릭해 주시고 ▣ 명령창에 tasklist를 입력하고 엔터키를 클릭합니다. ▣ 그럼 여러 리스티가 나올 텐데 우리가 작성하고 있는 Visual Studio에 프로젝트 이름을 확인합니다. 위에 이미지처럼 왼쪽 위에 보면 확인할 수 있습니다. 프로젝트 이름을 복사하고 다시 아까 명령프롬프트창에 돌아가 CTRL + F 키를 눌러 찾기를 하고 아까 복사했던 프로젝트 이름을 검색합니다. ▣ 그럼 프로젝트에 번호가 있는데 프로젝트 이름에 있는 번호를 복사하고 ▣ taskkill /f /PID 번호를 입력하고 엔터를 클릭하면 강제종료됩니다. 그리고 다시 프로젝트로 돌아가서 디버그를 하면 정상적으로 작동됩니다. 2023. 2. 15.
C++ [정적멤버변수, 정적멤버함수] ▣ 정적멤버를 생성하기 위해서는 멤버변수, 멤버함수에 데이터타입 앞에 static 키워드를 붙여주면 됩니다. 그럼 데이터영역에 저장되어 프로그램이 끝날 때까지 데이터가 남아 있고 외부에서도 접근이 가능합니다. ▣ int Player::count = 0; 정적변수를 초기화하는 코드입니다. 클래스명::멤버변수로 정적멤버변수를 접근해서 초기화할 수 있습니다. ▣ 정적멤버 함수 또한 Player::Sum(); 이런 식으로 호출할 수 있습니다. ▣ 그럼 Player p1;이라는 객체가 생성하기 전에 Sum() 정적멤버함수를 호출했기 때문에 정적멤버변수인 count가 +1이 되었고 또 p1.Sum()으로 호출했기 때문에 count = 1;인 상태에서 또 +1이 되었기 때문에 정적멤버변수인 count가 2가 출력됩니.. 2023. 2. 15.
언리얼엔진5 29장 [폴더관리, 게임모드위치] ▣ 안녕하세요. 이번장에서는 폴더 생성 및 폴더 관리에 관한 간단한 부분 그리고 Game Mode설정에 대한 부분을 공부해 보겠습니다. ▣ 먼저 폴더를 생성해 보겠습니다. Content에서 오른쪽마우스를 클릭하면 메뉴가 나오는데 맨 위에 New Folder를 클릭하시면 폴더를 생성할 수 있습니다. ▣ 폴더를 클릭해서 오른쪽마우스를 클릭하고 Set Color를 클릭하면 폴더의 색을 바꿀 수 있습니다. ▣ 원하는 색을 지정하고 OK를 클릭합니다. ▣ 그럼 위에 이미지처럼 폴더의 색을 바꿀 수 있습니다. ▣ Content에 바탕을 클릭한 상태로 CTRL키를 누른 상태로 마우스를 휠을 돌리면 폴더의 크기를 조절할 수 있습니다. ▣ Content를 클릭하고 마우스오른쪽버튼을 클릭하고 Show in Explorer.. 2023. 2. 15.
언리얼엔진5 28장 [Material] ▣ 안녕하세요. 이번장에서는 Material에 간단한 기능을 공부해 보겠습니다. ▣ 먼저 Place Actors에서 Cube 하나를 생성합니다. 그리고 Cube를 클릭한 다음 오른쪽 Details 메뉴에 보면 Static Mesh과 Materials메뉴가 있습니다. Static Mesh는 모양을 만들고 Materials는 색을 칠한다라고 생각하시면 됩니다. Materials에 원 모양을 더블클릭합니다. ▣ 그럼 이런 창이 나오는데 여기서 색에 대한 노드를 지정할 수 있습니다. ▣ Color블록에 네모모양을 더블클릭하면 이런 창이 나오는데 여기서 원하는 색을 선택해 주시고 컴파일 저장을 합니다. ▣ 씬에서 Cube를 확인하면 색이 바뀌었습니다. ▣ 이번에는 따로 Material을 생성하겠습니다. 폴더에서 .. 2023. 2. 14.