본문 바로가기

[ C++ ]84

C++ 33 [const 메소드, 멤버변수] ▣ const 메소드 : int 함수이름() const {} ▣ const 메소드는 해당 객체 안에 어떠한 값도 바꿀 수 없다. 2023. 10. 18.
C++ 32 [생성자 멤버변수 초기화리스트] ▣ 생성자에서 멤버변수 초기화 리스트 방법 : 클래스이름::생성자이름() : 멤버변수(값), 멤버변수(값) {} ▣ 매개변수가 있는 생성자 초기화 리스트 방법 : 클래스이름::생성자이름(매개변수) : 멤버변수(매개변수), 멤버변수(매개변수) ▣ { } 괄호에 위치가 멤버 변수 리스트 밑에 있어야 하고 : 초기화 리스트시 콜론을 붙이기 ▣ 그럼 number = 20; length = 20 이런 식으로 대입해도 되는데 초기화 리스트를 사용하는 이유는 (=) 대입은 초기화가 된 이후에 대입을 의미하고 () 리스트초기화는 오브젝트가 만들어질 때 초기화하는 것 다시 말해서 멤버변수 대입 없이 초기화, 상수, 참조변수를 초기화할 수 있다. 일반 대입은 불가능하다. ▣ 예시 const int number; , Pla.. 2023. 10. 18.
C++ 31 [스트림 객체 상태 플래그] ▣ 스트림 상태 플래그 ▣ 네임스페이스 : ios_base ▣ 비트플래그 ▣ goodbit : 아무 문제없고 잘 동작할 경우 0 ▣ eofbit : 파일에 끝, 읽을 문자가 없으면 에러 반환 ▣ failbit : 입력 실패시, string을 int로 읽는 경우 0 아니면 1 ▣ badbit : 문제가 있을 경우, 에러 반환 ▣ cin.clear() : 스트림 버퍼 초기화 ▣ cin.ignore(streamsize, 문자 EOF) : size만큼 문자를 버리고 문자를 버리면 멈춤 ▣ 입력 받은 문자열을 반대로 만들기 2023. 10. 4.
C++ 30 [Manipulator 조정자] ▣ 조정자를 통해 여러 방식으로 출력 가능 https://www.apiref.com/cpp/cpp/io/manip.html Input/output manipulators - C++ - API Reference Document Manipulators are helper functions that make it possible to control input/output streams using operator>. The manipulators that are invoked without arguments (e.g. std::cout > std::hex;) are implemented as func www.apiref.com ▣ 입력 출력 조정자 API 참고 2023. 10. 3.
C++ 29 [스마트 포인터] https://learn.microsoft.com/ko-kr/cpp/cpp/smart-pointers-modern-cpp?view=msvc-170 스마트 포인터(최신 C++) 자세한 정보: 스마트 포인터(최신 C++) learn.microsoft.com ▣ 스마트포인터 : C++11 버전 이후부터 새로운 스마트포인터 제공 ▣ 스마트포인터 : 메모리 할당 시 따로 delete를 사용하지 않아도 메모리 자동해제 ▣ 스마트포인터 종류 ▣ unique_ptr : 하나의 객체에 하나의 포인터만 소유권을 가질 수 있는 스마트포인터 ▣ shared_ptr : 하나의 객체가 참조하는 스마트 포인터가 총 몇 개인지를 참조하는 스마트포인터 ▣ weak_ptr : shared_ptr 객체에 대한 접근은 가능하지만 메모리 소.. 2023. 5. 16.
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.
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.