C++ 프로그래밍/클래스

    윈도우에서 제공하는 표준 템플릿 라이브러리 라이브러리(STL)

    윈도우에서 제공하는 표준 템플릿 라이브러리 라이브러리(STL)

    C++ 표준 템플릿 라이브러리(STL) 템플릿은 일반화된 코드의 형태로 다양한 타입에 대한 처리를 가능하게 합니다. 따라서 라이브러리가 템플릿 형태로 제공된다면 많은 장점이 생기게 됩니다. C++에서는 표준 템플릿 라이브러리(STL)를 제공합니다. 프로그램에서 공통적으로 많이 사용하는 다양한 자료구조(vector, list, deque 등등)와 알고리즘(정렬, 탐색, 힙 등등)들을 템플릿의 형태로 제공합니다. STL에 대해 배우기 전에 가장 많이 사용되는 컨테이너 중 하나인 벡터를 구현해 보고 활용해 보면서 이해하는 과정을 거쳐야 합니다. STL.. 저는 이해하기 많이 어려웠습니다.. 하지만 제가 이해한 부분을 최대한 적어보겠습니다. 위의 이미지는 제가 이해한 내용으로 STL은 컨테이너와 알고리즘 그리고..

    일반화 프로그래밍

    일반화 프로그래밍

    일반화 프로그래밍: 알고리즘이나 자료구조에 대한 추상적인 개념을 가지고 일반적인 코드로 작성하고, 이것을 다양한 자료형의 객체들에 대해 재사용하는 기법 보통 여러 자료형으로 만들 필요가 있는 함수를 일반화 프로그래밍을 이용해서 만듭니다. C++에서는 템플릿을 이용해 일반화 프로그래밍을 지원합니다. - 템플릿(template)은 다형성의 한 종류로 컴파일 동안 일어나는 정적 다형성이므로 효율적입니다. - 함수 템플릿과 클래스 템플릿이 있습니다. - template와 typename 키워드를 사용하고, typename 다음에 형식 매개변수(또는 타입 매개변수를)를 지정합니다. - 타입 매개변수 리스트에 꺽은 괄호 “”를 사용합니다.이것은 둥근 괄호 “( )”를 사용하는 함수의 매개변수 리스트와 구분됩니..

    형 변환

    형 변환

    어떤 값을 다른 자료형으로 변수에 저장할 필요가 있을 때 형 변환을 사용합니다. 2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-상속에서의 형 변환 다형성-상속에서의 형 변환 1. 기본 자료형에 대한 형 변환 형 변환이란 특정한 자료형에 속하는 값을 다른 자료형의 값으로 변환하는 것을 말합니다. 다음은 int 값을 double로 변환하는 형 변환이 이루어지는 문장입니다. int onesside-world.tistory.com 위의 블로그에서도 상향 형변환과 하향 형변환을 이용해 부모 객체가 자식 객체가 되었습니다. 이런 형 변환을 더 안전하게 사용하기 위해 C++은 네가지의 형 변환 연산자를 제공합니다. 형 변환 연산자 설명 reinterpret_cast C언어 형변환과 유사함, 무조건적인..

    const 중요

    const 중요

    const를 이용해 쉽게 상수를 만들어 사용할 수 있습니다. 근데 솔직히 const를 신경 쓰지 않고 코드를 작성해도 프로그램에 오류나 문제는 전혀 없습니다. 그렇다면 왜 쓰는 것일까요? (´・ω・`)? 이유는 개발자의 실수를 줄이기 위해서입니다. 개발자가 무심코 상수를 수정하려고 하면 컴파일러가 에러 메시지를 출력합니다. 저도 책의 예제인 MonsterWorld라는 게임을 이해하고 따라 적으면서 매개변수를 const로 전해줘야 되는걸 예전 버전에서는 안 해도 되다가 현재 버전에서는 필수로 const로 전달해줘야 하는 것 때문에 실수를 방지한 부분이 있습니다. 예를 들어 void print(const char *title = "") {...} 같은 char 포인터나 연산자 중복할 때 bool operat..

    예외 처리 방법들

    예외 처리 방법들

    ▶일반적인 예외 처리 방법들 일반적인 예외 처리 방법들을 소개하기 위한 분모(bottom)가 0이 되면 안 되는 Rational 클래스를 만들겠습니다. #pragma once #include #include using namespace std; struct NegBotException { int top, bottom; NegBotException(int t = 1, int b = 0) : top(t), bottom(b) {} }; class Rational { int top;// 유리수의 분자 int bottom;// 유리수의 분모(0이 아니어야 함) public: double real() { return (double)top / bottom; //bottom이 0이면 안 됨 } }; 예외 상황에 대한 ..

    예외 처리란?

    예외 처리란?

    프로그램은 실행되는 동안 개발자가 예상치 못한 다앙한 예외 상황을 맞을 수 있습니다. 예를 들어, 동적으로 메모리를 할당하려는데 메모리가 없거나 배열의 인덱스 범위를 넘는 인덱스를 사용하든지, 때로는 어떤 값을 0으로 나누려는 잘못된 시도가 발생합니다. 따라서, 개발자는 자신의 프로그램이 이러한 예외 조건(exceptional condition)에 대응할 수 있도록 준비하여야 합니다. 오류(error): 메모리가 부족해 프로그램을 더 사용 못하는 경우처럼 치명적인 상황 예외(exception): 배열의 인덱스 범위를 넘는 인덱스를 사용하든지, 때로는 어떤 값을 0으로 나누려는 잘못된 시도 같은 프로그램을 종료할 만큼 심각한 상황은 아닌 상황 예외(exception)는 심각하지 않은 오류를 말합니다. C+..

    프랜드 선언

    프랜드 선언

    ▶프랜드 클래스(friend class) C++은 캡슐화의 은닉성으로 접근 지정자들을 제공합니다. public 멤버들은 클래스의 외부에서도 접근이 가능하지만 private나 protected는 멤버에 대한 접근을 제한합니다. 그러나 어떤 경우에는 다른 클래스에서는 말고 친구(friend)에게만 클래스가 외부에 자신의 내부 데이터까지 사용할 수 있도록 허용하고 싶은 경우가 있습니다. 이 때. C++은 friend 키워드를 제공합니다. 선언하는 방법은 아래와 같습니다. class 허용해주는_클래스명 { friend class 허용받는_클래스명; ... }; 특징으로는 4가지가 있습니다. friend 선언은 클래스 내의 어떤 위치도 상관없다. 허용 받는 클래스는 허용해주는 클래스의 모든 멤버를 접근할 수 있다..

    다형성-순수 가상 함수와 추상 클래스

    다형성-순수 가상 함수와 추상 클래스

    ▶순수 가상 함수 2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-가상 함수와 동적 바인딩의 의미 다형성-가상 함수와 동적 바인딩의 의미 가상(virtual) 함수는 실제로는 어떤 함수가 실행될지 결정되기도 전에 미리 사용되었다고 해서 가상이라는 이름을 얻었습니다. 가상 함수는 실행시간 다형성을 구현하는 방법으로, 소프트웨어의 onesside-world.tistory.com 여기서 구현한 그래픽 에디터의 객체들은 화면에 그리는 방법이 각기 다릅니다. 사각형이나 원을 그리는 알고리즘은 각기 다릅니다. 그렇기 때문에 draw() 함수에서 어떤 일을 해야 할지가 명확합니다. 그런데, Shape 부모 클래스는 좀 다릅니다. 모든 자식 클래스들이 draw()라는 동작을 가져야 하므로 부모 클래스에서..

    다형성-가상 함수와 객체의 크기

    다형성-가상 함수와 객체의 크기

    ▶상속에서의 객체 크기 상속을 하면 객체들의 크기는 어떻게 될까요? 모든 자식 클래스의 객체에는 상속받은 부모의 영역이 있습니다. 따라서 자식 클래스의 크기는 부모의 크기에 자신이 추가한 데이터 멤버의 크기가 더해질 것입니다. 자식 클래스의 크기 = 부모 클래스의 크기 + 자신이 추가한 데이터의 크기 여기서 클래스의 멤버 함수들이나 정적 멤버 변수, 함수들은 당연히 다른 공간에 저장되는 건 알 겁니다. ▶가상 함수와 객체의 크기 가상 함수를 사용하기 위해 컴파일러가 정확히 어떻게 동작하는지 우리가 정확히 알 필요는 없습니다. 이것도 정보 은닉의 장접입니다. 가상 함수를 처리하는 방법만 간단히 알아봅시다. 가상 함수(virtual)가 클래스에 하나라도 있으면 컴파일러는 그 클래스에 대해 가상 함수 테이블(..