CPP 32

[cpp개념공부]문자열 스트림

표준 정보는 여기서 봅시다. https://cplusplus.com/reference/sstream/stringstream/ https://en.cppreference.com/w/cpp/io/basic_stringstream 문자열 스트림 (std::stringstream) 마치 문자열을 하나의 스트림이라 생각하게 해주는 가상화 장치 sstream에는 std::istringstream 이 정의되어 있는데 이는 문자열을 하나의 스트림으로 생각하게 해주는 가상화 장치 입니다. std::istringstream 을 통해서 123 을 읽어낼 수 있습니다. 이를 활용하면 atoi 와 같은 함수를 사용할 필요 없이 간편하게 문자열에서 숫자로 변환하는 함수를 만들 수 있습니다. 스트림에서 데이터를 가져오는 방법 스트..

CPP/Cpp module 2023.03.06

[Cpp 개념공부]표준스트림과 입출력

C++의 입출력 라이브러리 모든 입출력 클래스의 기반 ios_base 클래스 C++ 의 모든 입출력 클래스는 ios_base 를 기반 클래스로 하게 됩니다. ios_base 클래스는 많은 일은 하지 않고, 스트림의 입출력 형식 관련 데이터를 처리 합니다. 예를 들어 실수 형을 출력할 때 정밀도를 어떤 식으로 할 것인지에 대해 아니면 정수형을 출력 시에 10진수로 할지 16진수로 할지 등을 이 클래스에서 처리 합니다. 스트림 버퍼를 초기화하는 ios 클래스 ios클래스는 실제로 스트림 버퍼를 초기화 합니다. 스트림 버퍼란 스트림버퍼란, 데이터를 내보내거나 받아들이기 전에 임시로 저장하는 곳이다. 쉬운 예시로 우리가 하드디스크에서 파일을 하나 읽을 때 일어나는 일을 생각하면 된다. 만약 사용자가 1 바이트씩..

[cpp개념공부]클래스 멤버 포인터 , 함수 포인터(CPP Module02)

함수 포인터에 대한 개념과 멤버포인터 개념이 부족해서 한번 정리하고자 한다. 함수 포인터란 함수는 메모리 상에 있다는 것이 의아할 수 있다. 그러나 사실 프로그램 코드 자체는 메모리 상에 존재한다. 배열도 배열의 이름이 배열의 시작값을 가리키는 주소처럼, 함수 이름이 함수의 시작 주소 값을 의미한다. 함수 포인터의 정의 방법 (함수의 리턴형) (*포인터 이름)(첫번째 인자 타입, 두번째 인자 타입,....) (만일 인자가 없다면 그냥 괄호 안을 비워두면 된다. 즉, int (*a)() 와 같이 하면 된다) 42과제에서 궁금증 그냥 함수처럼 사용하면 되는데..! 이번 과제에서는 왜 포인터로 해야할까? 멤버 포인터 연산자…! The goal of this exercise is to use pointers t..

CPP/Cpp module 2023.02.28

[cpp개념공부] throw ,try-catch

throw : 예외 발생시키기C언어와 다른 C++의 예외 처리C 언어에서는 예외가 발생했을 때, 다른 값을 리턴하는 것으로 예외를 처리하였지만, C++ 에서는 예외가 발생하였다는 사실을 명시적으로 나타낼 수 있습니다. 바로 throw 문을 사용하면 됩니다.표준 라이브러리 정의 예외 처리 객체 C++ 에는 예외를 던지고 싶다면, throw 로 예외로 전달하고 싶은 객체를 써주면 됩니다. 예외로 아무 객체나 던져도 상관 없지만, C++ 표준 라이브러리에는 이미 여러가지 종류의 예외들이 정의되어 있어서 이를 활용하는 것도 좋습니다.예를 들어서, 위 경우 out_of_range 객체를 throw 합니다. C++ 표준에 out_of_range 외에 overflow_error, length_error, runtim..

[cpp개념공부] 가상함수와 업 캐스팅

상속을 사용하는 이유기능이 겹치는 부분을 여러 번 복사 붙혀넣기 할 필요 없이 기능을 가져와서 사용하기 위해서상속이라는 기능을 통해서 객체지향 프로그램이 추구하는 객체의 추상화를 더 잘할 수 있다.클래스간의 관계is -a 관계모든 상속 관계는 is a 관계이다.class Manager : public Employee• Manager is a Employee !!Manager 클래스는 Employee 의 모든 기능을 포함한다Manager 클래스는 Employee 의 기능을 모두 수행할 수 있기 때문에 Manager 를 Employee 라고 칭해도 무방하다즉, 모든 Manager 는 Employee 이다 ( Manager is a Employee !! )클래스가 파생될수록 좀 더 특수화(구체화 special..

[Cpp 개념공부] 상속 (함수 오버라이딩, 상속 접근지시자)

상속 (Inheritance) 다른 클래스의 내용을 그대로 포함 할 수 있다. -즉 복사 붙혀넣기를 줄일 수 있는 방법 부모 - 자식 클래스 또는 기반-파생 클래스라고 부른다. (부모가 여럿일 수 있기 때문에 기반 파생 클래스가 더 적절하다)ex) class Derived : public Base ===⇒ Derived 가 Base를 public 형식으로 상속 받았다. 초기화 리스트에서 파생클래스는 기반클래스의 생성자를 먼저 호출하고 파생클래스의 초기화를 한다. 만약 명시적으로 호출 하지 않았다면 기반클래스의 디폴트 생성자가 호출된다. 예시 class Derived : public Base { std::string s; public: Derived() : Base(), s("파생") {// Derived..

[cpp 개념공부]연산자 오버로딩 (사용자 지정 연산자, 대입연산자, 입출력 오버로딩 ,첨자 연산자 Wrapper class)

사용자 지정 연산자 💡기본 연산자를 사용자가 직접 정의해서 사용하는것 :사용불가 사용자 지정 연산자💡::(범위지정), .(멤버지정), .*(멤버포인터로 멤버지정)을 제외한 모든 연산자 가능사용가능 사용자 지정 연산자+, -, * 와 같은 산술 연산자+=, -= 와 같은 축약형 연산자>=, == 와 같은 비교 연산자&&, || 와 같은 논리 연산자-> 나 * 와 같은 멤버 선택 연산자 (여기서 * 는 역참조 연산자 입니다. 포인터에서 p 할 때 처럼)++, -- 증감 연산자[] (배열 연산자) 와 심지어 () 까지 (함수 호출 연산자) 연산자 오버로딩기본형 : (리턴 타입) operator (연산자) (연산자가 받는 인자) 이 방법 외에는 함수 이름으로 연산자를 넣을 수 없다. Complex operato..

[c++개념정리]암시적 변환, explicit, mutable

💡 자주 쓰이지는 않지만 나름 중요한 explicit 과 mutable 키워드 암시적 변환 💡 클래스를 만들어서 넘겨줘야하는데 바로 넘겨주는 경우 컴파일러는 똑똑해서 클래스로 알아서 변환을 해줘서 넘겨준다. 이와 같은 변환을 우리는 암시적 변환이라고 부른다. void DoSomethingWithString(MyString s) { // Do something... } DoSomethingWithString(MyString("abc")) 이건 당연하게 가능하다. DoSomethingWithString("abc") 이것도 신기하게도 가능하다. "abc " 는 MyString타입이 아니다. 그런데 C++ 컴파일러는 꽤나 똑똑해서 "abc" 를 어떻게 하면 MyString으로 바꿀 수 있는지 생각해봅니다. 다행..

[c++개념공부]복사 생성자 (깊은복사 얕은복사), 소멸자

💻 new와 malloc의 차이점 new 의 경우 객체를 동적으로 생성하면서 동시에 자동으로 생성자를 호출하는 특징이 있다. 예시코드 Marine* marines[100]; marines[0] = new Marine(2, 3); marines[1] = new Marine(3, 5); marines[0]->show_status(); marines[1]->show_status(); //그외 다양한 행동 후 delete marines[0]; delete marines[1]; new 연산자를 통한 메모리 할당이 실패할 경우는 예외가 발생하여 프로그램이 즉시 종료된다. 소멸자(Destructor) 우리가 생성했던 객체가 소멸될 때 자동으로 생기는 소멸자. 생성자 : Marine() 소멸자 : ~Marine() 객..

728x90