본문 바로가기

전체 글649

C++ 28 [예외처리] https://learn.microsoft.com/ko-kr/cpp/cpp/exception-handling-in-visual-cpp?view=msvc-170 MSVC의 예외 처리 C++ 언어 참조 예외 처리 개요입니다. learn.microsoft.com ▣ 예외처리 : 예외 발생 시 대처하는 코드 ▣ try : 예외를 감지하고, main() 함수 전체를 포함할 수 있다. ▣ throw : 예외가 발행했을 때 예외 발생을 알리고 던지는 코드 ▣ catch : 예외를 받아 처리하는 블록 코드 ▣ catch (const char *s) : 문자열을 받아서 처리 가능 ▣ throw : 던지는 예외 값의 타입과 일치하는 catch() 블록 실행 ▣ try {} 블록에는 반드시 1개 이상의 catch() 블록이.. 2023. 5. 12.
유니티 - [2D 오브젝트 따라다니는 AI] ▣ 2D 스프라이트를 생성해 주세요. Square로 Player이름으로 , Circle를 Zombie로 생성합니다. ▣ Zombie 오브젝트에 ZombieManager라는 스크립트를 생성하고 코드처럼 작성합니다. ▣ Vector2.MoveTowards(자신에 위치, 타깃위치, 이동스피드 * 경과시간); ▣ 저장하고 시작버튼을 클릭하면 Zombie 오브젝트가 Player오브젝트 방향으로 이동합니다. https://assetstore.unity.com/top-assets/top-new?aid=1101lvILc 2023. 5. 9.
C++ 27 [파일입출력] ▣ 파일입출력 : ifstream : 파일입력(파일 읽기), ofstream : 파일출력(파일 쓰기), fstream : 입출력(파일 읽기, 쓰기) ▣ ofstream f("C:\\C++\\test.txt", ios::out); : ofstream 변수이름("파일경로 및 파일이름", 모드); ▣ ofstream f("C:\\C++\\test.txt"); : 매개변수에 모드를 넣지 않아도 ofstream이기 때문에 out으로 처리 ▣ f 2023. 5. 9.
C++ 26 [포맷플래그 입출력] ▣ 형식상태는 비트 형태로 표현되는 형식 플래그 값에 의해 그 의미가 지정 ▣ long setf(long n) : 형식 플래그를 인수로 받아서 이 플래그 값에 해당하는 비트의 필드를 세팅하는 함수 ▣ long unsetf(n) : setf() 함수와 반대의 기능을 수행하는 함수, 해당 비트를 끝내는 함수 ▣ long flags() : 현재 플래그의 상태를 반환하는 함수 ▣ long flags(long n) : 플래그를 인수 n의 비트 패턴으로 세팅시키고 변경되기 이전의 플래그 값으로 반환 ▣ ios::skipws : 입력 시 공백문자 무시한다. ▣ ios::left : 폭 안에 출력을 왼쪽 정렬 ▣ iost::right : 폭 안에 출력을 오른쪽 정렬 ▣ ios::scientific : 과학산술용 표기로.. 2023. 5. 3.
C++ 25 [람다 표현식] https://learn.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170 C++ 람다 식 자세한 정보: C++의 람다 식 learn.microsoft.com ▣ 람다 : c++11 표준부터 지원, 람다 표현식, 람다 함수, 이름 없는 함수 ▣ 람다 사용방법 : [캡쳐](매개변수){함수코드;};(호출인자); [](매개변수){함수코드}(호출인자); []{함수코드;}; []{함수코드;}; [](매개변수){함수코드;}; auto n = [](매개변수){함수코드;} ; auto n = [](매개변수) -> 반환형 {함수코드;}; ▣ (;) 세미콜론에 위치는 문장 끝, 함수 끝 부분에 넣어야 한다. 람다식도 동일하다. ▣ 캡처 : 람다 외부 .. 2023. 4. 28.
C++ 24 [STL, map] ▣ map : key와 value로 이루어져 저장하고 key를 이용해서 값을 검색하는 제네릭 컨테이너, 중복을 허용하지 않음 ▣ map을 사용 : #include ▣ map 객체 : map 객체이름 ▣ map 값 접근 : dic[key] ▣ insert() : map에 삽입, 단 key가 중복되면 삽입을 하지 않는다. ▣ erase(포인터) : 가리키는 포인터 원소 삭제 ▣ begin() : 첫 번째 map 주소 반환 ▣ end() : 마지막 map 다음 주소 반환 ▣ at() : map에 키 값에 값을 반환 ▣ find(key) : map에 key를 가리키는 iterator(포인터) 반환 ▣ d->first : 주소에 값 접근 ▣ empty() : map이 비어 있으면 true 반환 ▣ clear() .. 2023. 4. 26.
C++ 23 [STL, list] https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%ED%85%9C%ED%94%8C%EB%A6%BF_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC 표준 템플릿 라이브러리 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 표준 템플릿 라이브러리(STL: Standard Template Library)는 C++을 위한 라이브러리로서 C++ 표준 라이브러리의 많은 부분에 영향을 끼쳤다. 이것은 알고리즘, 컨테이너, ko.wikipedia.org ▣ list : 이중 연결 리스트, 선형 구조를 가지는 시퀀스 컨테이너이며 노드 기반으로 데이터를 저장 요소들이 근접한 메모리에 저장되지 않는다. 배열과 다른 구조, 느린 검색.. 2023. 4. 26.
C++ 22 [STL, vector] https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%ED%85%9C%ED%94%8C%EB%A6%BF_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC 표준 템플릿 라이브러리 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 표준 템플릿 라이브러리(STL: Standard Template Library)는 C++을 위한 라이브러리로서 C++ 표준 라이브러리의 많은 부분에 영향을 끼쳤다. 이것은 알고리즘, 컨테이너, ko.wikipedia.org ▣ STL : 표준 템플릿 라이브러리(Standard Template Library) ▣ STL 구성 컨테이너(템플릿 클래스) : vector, set, list, stack,.. 2023. 4. 25.
C++ 21 [템플릿] ▣ 데이터타입별로 반환형 매개변수를 다르게 하여 함수오버로딩 가능, 하지만 다른 데이터타입에 대한 걸 계속 만들어야 하기 때문에 가독성이 떨어진다. ▣ 템플릿 : 함수와 클래스가 제네릭형으로 동작할 수 있게 해주는 틀 ▣ 제네릭 : 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술 https://ko.wikipedia.org/wiki/%ED%85%9C%ED%94%8C%EB%A6%BF_(C%2B%2B) 템플릿 (C++) - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 템플릿(template)은 C++ 프로그래밍 언어의 한 기능으로, 함수와 클래스가 제네릭 형과 동작할 수 있게 도와준다. 함수나 클래스가 개별적으로 다시 작성하지 않고 ko.wiki.. 2023. 4. 21.
C++ 20 [추상클래스, 순수가상함수] ▣ 순수 가상 함수 : 함수에 코드(원형)는 없고 선언만 하는 가상함수 ▣ 추상 클래스 : 순수 가상 함수가 포함되어 있는 클래스 ▣ 순수 가상 함수가 선언되었기 때문에 자식 클래스에서 오버라이딩을 해야 한다, 그렇지 않으면 추상 클래스의 인스턴스(객체)를 생성할 수 없다. ▣ 추상 클래스의 목적 : 순수 가상 함수를 통해서 자식 클래스가 구현할 함수의 원형을 보여주는 인터페이스 역할 ▣ 추상 클래스로 함수에 선언부를 잡아놓고 자식클래스에서 그 목적에 맞게 다시 구현(정의)해서 사용하기 때문에 선언부와 구현부를 나누어서 사용 가능 2023. 4. 20.
C++ 19 [가상함수, 오버라이딩] ▣ Player 부모클래스, Soldier자식클래스 같은 hit() 함수 정의, 이걸 함수재정의, 함수오버로딩이라고 한다. ▣ 그럼 위에 주석처럼 Soldier자식클래스는 Player에 멤버를 상속받는다. ▣ Player player; Soldier soldier; Player* pplayer = new Player; Player* pSoldier = new Soldier; 코드를 통해서 객체를 포인터로 state() 함수에서 hit를 호출하게 되면 class Soldier : public Player 상속 int hit(int attack) { cout 2023. 4. 20.
C++ 18 [상속, 다중상속, 가상상속] ▣ 상속 : 부모클래스(기본클래스), 자식 클래스(파생클래스)에 관계를 의미 ▣ 클래스 간에 상속을 하는 이유 : 클래스 재활용 및 생산성, 관리에 용이하기 때문 ▣ 상속 방법 : class 자식클래스명 : public 부모클래스명 { }; ▣ 부모클래스에 public, private, protected 모두 사용 가능 ▣ 상속 횟수는 제한이 없고 상속받은 자식클래스는 부모의 모든 멤버를 접근 가능 ▣ protected 접근지정자는 상속받은 클래스는 접근이 가능 ▣ 자식클래스가 부모클래스를 상속할 때에도 생성자, 소멸자 모두 실행 ▣ 자식클래스를 객체로 사용할 때 부모클래스 생성자 호출 -> 자식클래스 생성자 호출 -> 자식클래스 소멸자 호출 -> 부모클래스 소멸자 호출, 이런 순으로 실행 ▣ 이러한 생.. 2023. 4. 19.
C++ 17 [연산자 오버로딩] ▣ 연산자 오버로딩 : 연산자 중첩, 연산자 의미를 확대해서 지정, 연산자 중복 ▣ string 객체를 사용해서 문자열 + 문자열로, (+) 연산자 오버로딩 ▣ 단항 연산자 : 예시) x++, ++x, y--, --y : 하나의 항이 존재하는 연산자 ▣ 이항 연산자 : 예시) x+y, x-y, x*y, x/y : 두 항이 존재하는 연산자 ▣ 자료 참고 https://namu.wiki/w/%EC%9D%B4%ED%95%AD%EC%97%B0%EC%82%B0 ▣ 전치(선처리): ++x , 연산 후 대입 ▣ 후치(후처리) : x++, 참조 후 연산, ▣ 둘 다 +1 연산, --x, x-- 도 가능 ▣ 선치 연산자오버로딩 함수 선언 방법 : Player Player::operator++() ▣ operator++ .. 2023. 4. 14.
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++ 14 [유니폼 초기화] ▣ C++11 이번에는 타입의 초기화 방식이 일정하지 않았다. ▣ C++11부터 타입을 초기화할 때 유니폼 초기화(균일, 중괄호) 초기화를 따르도록 통일 ▣ C++ 11부터 {} 유니폼초기화를 이용해서 초기화 가능 ▣ n4{3}; : 대입연산자(=)를 생략가능하다. ▣ int n5{}; : 빈 중괄호로 초기화할 경우 0으로 초기화 ▣ 유니폼 초기화를 사용해서 구조체, 클래스 모두 초기화가 가능하고 초기화할 경우 생성자가 자동으로 호출 ▣ 동적메모리 할당을 하며 유니폼 초기화를 할 수 있다. 2023. 4. 12.
C++ 13 [함수오버로딩, 디폴트 매개변수] ▣ 함수 오버로딩 : c++에서 이름이 같은 함수를 여러 개 만들 수 있다. ▣ 함수 오버로딩 : 함수이름을 중복해서 만들 수 있지만 매개변수 타입이랑 변수의 개수를 다르게 해야 한다. ▣ 디폴트매개변수 : 매개변수의 기본값을 설정 ▣ output(int num1, int num2 = 20) : 함수 호출 시 output(10, 100);처럼 호출하게 되면 함수를 호출해서 전달한 100이 매개변수의 기본값이 된다. output(10); 함수를 호출할 때 매개변수 값을 전달하지 않으면 디폴트매개변수 값으로 지정된다. ▣ 디폴트 매개 변수를 지정할 때 매개변수의 끝부분에 지정해야 오류를 방지할 수 있다. ▣ 함수를 호출할 때 매개변수를 전달해주지 않으면 오류가 발생한다. 2023. 4. 6.
C++ 12 [복사생성자] ▣ 객체 복사 방법 : Player p2(p1), Player p2 = p1; ▣ 복사생성자 임의로 정의 : Player::Player(const Player& player) ▣ 객체복사 시 자동으로 복사생성자 호출 ▣ 위에 코드처럼 복사생성자를 임의로 정의하지 않을 경우 디폴트 복사생성자 호출 this->level = player.level; 처럼 기본적으로 원본객체의 멤버변수 포인터를 사본 this객체에 복사 ▣ 복사 생성자를 호출하여 임의로 복사된 객체의 값을 변경할 수 있다. ▣ 객체를 복사할 경우, 객체를 매개변수로 받아올 경우, 객체를 반환할 경우 자동으로 복사생성자를 생성하고 호출한다. 2023. 4. 6.
C++ 11 [auto] ▣ C++ 11이후 버전 기준, auto 키워드는 자동으로 데이터타입을 정해준다. ▣ auto n1 = 10; : int형 데이터타입으로 자동으로 지정 ▣ typeid(변수이름).name() : 변수에 데이터타입 이름을 반환해 주는 함수 ▣ const auto n1 = 10; : const 키워드를 붙여서 지정하면 상수처럼 정의할 수 있다. ▣ auto& : 참조자나 포인터를 사용하여 선언 가능 ▣ auto n1 = player; : 클래스나 포인터를 auto 키워드로 선언할 수 있다. ▣ auto Player::lvUp(int level) : auto 키워드를 반환형으로 사용이 가능 ▣ auto 키워드를 사용해서 참조, 값, 객체를 반환할 수도 있다. ▣ void Player::lvUp(auto lev.. 2023. 4. 5.
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.