본문 바로가기

C언어100

언리얼엔진5 47장 [Collapse to Function] ▣ 블루프린트에서 여러 블록을 클릭한 다음에 오른쪽 마우스를 누르면 Collapse to Function라는 메뉴가 있습니다. ▣ 클릭하면 이렇게 여러블록이 하나의 함수로 묶이게 된다. ▣ 만든 함수를 더블 클릭하면 이렇게 함수에 내부를 편집할 수 있습니다. 2023. 6. 8.
언리얼엔진5 46장 [Collision] ▣ 씬메뉴에서 Wireframe, Collision 등 여러 모드로 화면을 설정해서 볼 수 있다. ▣ Mesh에 들어가서 보면 Collision을 설정하는 메뉴가 있고 여러 형태로 자동으로 지정해 줄 수 있다. 2023. 6. 7.
언리얼엔진5 45장 [Actor에 자식추가] ▣ 언리얼 마켓플레이스에서 Pack6을 다운로드합니다. 매달 무료로 제공하는 에셋 체크 ▣ 다운로드하고 프로젝트에 import 합니다. 그리고 프로젝트에 Content에 Meshes 폴더를 찾습니다. ▣ SM_Rack01를 레벨에 드래그하여 불러온 후 SM_Rack02를 레벨에 있는 SM_Rack01 컴포넌트에 StaticMesh에 드래그합니다. 그럼 SM_Rack02가 SM_Rack01 엑터에 자식으로 추가된다. ▣ 그리고 SM_Rock01 엑터에서 Physic를 활성화하여 하늘에서 떨어뜨리게 되면 SM_Rock01과 SM_Rock02가 같이 붙어서 떨어지게 된다. 2023. 6. 6.
C++ 16 [객체 반환] ▣ this : 자신에 객체 주소를 의미 ▣ *this : 포인터와 동일하게 자신에 객체 주소에 있는 값 ▣ return *this;으로 객체를 반환하게 되면 그 객체의 멤버변수들에 모든 값들이 반환된다. 2023. 4. 13.
C++ 15 [friend 함수, 클래스] ▣ 프렌드를 사용하는 이유 : 클래스, 함수, 멤버 간에 공유해야 할 상황이 있을 경우, 클래스의 private, protected 멤버를 접근해야 하는 특별한 경우 ▣ 프렌드 함수 선언 방법 : friend void gameStart(Player); : 접근할 함수 반환형 앞에 friend키워드를 붙인다. ▣ gameStart(Player) : 코드처럼 접근할 클래스를 매개변수로 지정해야 한다. ▣ void gameStart(Player p) : 함수를 정의할 때에도 매개변수를 접근할 클래스로 정해준다. ▣ 프렌드 클래스 선언방법 : friend class Player2, 접근 권한을 줄 클래스를 선언할 때 맨 앞에 friend 키워드를 붙이고 선언한다. ▣ 프렌드를 선언할 때 클래스에 public, .. 2023. 4. 13.
C++ 13 [함수오버로딩, 디폴트 매개변수] ▣ 함수 오버로딩 : c++에서 이름이 같은 함수를 여러 개 만들 수 있다. ▣ 함수 오버로딩 : 함수이름을 중복해서 만들 수 있지만 매개변수 타입이랑 변수의 개수를 다르게 해야 한다. ▣ 디폴트매개변수 : 매개변수의 기본값을 설정 ▣ output(int num1, int num2 = 20) : 함수 호출 시 output(10, 100);처럼 호출하게 되면 함수를 호출해서 전달한 100이 매개변수의 기본값이 된다. output(10); 함수를 호출할 때 매개변수 값을 전달하지 않으면 디폴트매개변수 값으로 지정된다. ▣ 디폴트 매개 변수를 지정할 때 매개변수의 끝부분에 지정해야 오류를 방지할 수 있다. ▣ 함수를 호출할 때 매개변수를 전달해주지 않으면 오류가 발생한다. 2023. 4. 6.
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.
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++ 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 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.
C언어 [파일입출력] ▣ fopen() : 파일 열고 생성 fopen() 함수원형 : FILE*(반환형 FILE포인터) fopen(const char*name(위치 및 파일 이름), const char*mode(모드지정)); ▣ 모드 종류 r : 읽기 모드 w : 쓰기(파일이 존재하면 기존 내용이 삭제된다.) a : 추가(파일이 있으면 데이터가 끝에 추가된다.) r+ : 읽기와 쓰기 모드(파일이 존재해야 한다.) w+ : 읽기와 쓰기 모드(파일이 존재하면 새 데이터가 기존 데이터를 덮어쓴다.) a+ : 읽기와 추가 모드 (파일이 존재하면 데이터가 파일 끝에 추가된다. 읽기는 어떤 위치에서나 가능) ▣ fputc() : 한 글자를 파일에 쓰는 함수 fputc() 함수원형 : fputc('문자', FILE*) ▣ fclose(f.. 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.