본문 바로가기

C++15

[C++] 입출력 스트림 (2) cout을 이용한 출력 cout은 표준 출력 스트림인 ostream의 객체이다. ostream은 연산자 2023. 9. 25.
[C++] 입출력 스트림 (1) 입출력 스트림의 개요 C++ 언어에서는 스트림 객체를 통하여 입출력을 수행하는데, 입출력과 관련이 있는 클래스들에 대해서는 에 정의되어 있다. 스트림과 버퍼 C++ 프로그램은 입력과 출력을 '문자의 흐름(스트림)' 으로 취급한다. 컴퓨터의 입출력에서 주로 취급하는 정보의 단위는 문자이다. 스트림이란 시냇물과 같이 문자들이 계속 흘러간다는 의미이다. 입력장치와 프로그램 사이 그리고 프로그램과 출력장치 사이에 문자가 흘러갈 수 있는 통로가 있다고 생각하는 것이다. 프로그램에서 입출력 장치 간에 데이터를 원활하게 전송할 목적으로 버퍼를 사용한다. 버퍼는 물을 저장하는 물탱크와 같은 역할을 수행한다. 일반적으로 디스크는 데이터 블록 단위(운영체제에 따라 블록의 크기는 다르지만, 일반적으로 512바이트의 배수)로.. 2023. 9. 24.
[C++] 예외처리 예외의 개념 예외(exception)란 프로그램이 수행되는 도중에 정상적이지 않은 사건이 발생하는 것을 말한다. 예외가 발생할 수 있는 대표적인 상황 변수의 값에 따라 연산을 수행하지 못하는 경우 사용자의 입력이 프로그래머가 기대한 것과 다른 경우 프로그램에서 자원을 필요로 할 때 컴퓨터가 자원이 부족한 경우 C++ 언어의 예외처리 체계 C++ 언어에서는 데이터의 오류, 시스템 자원(기억장치 공간, 입출력 장치)의 부족 등과 같은 비정상적이지만 예측할 수 있는 예외에 대처할 수 있는 예외처리 방법을 지원한다. 예외처리의 기본 C++ 언어의 예외처리 체계는 try 블록과 catch 블록, 그리고 throw 문장으로 구성된다. ReturnTypa1 someFunction() { ..... try {//예외가.. 2023. 9. 23.
[C++] 템플릿 (2) 함수 템플릿 클래스 템플릿을 사용한다는 것은 멤버함수 템플릿을 사용한다는 것을 암시적으로 포함하고 있다. 그러나 클래스의 멤버함수가 아닌 전역함수에 대한 템플릿도 만들 수 있다. 템플릿의 멤버함수를 선언하는 방법 template ReturnType funcName(fParameterList) { .... //함수 몸체 } 함수 템플릿의 다중정의 함수 템플릿은 일반 함수와 마찬가지로 다중정의를 허용한다. 즉, 함수 템플릿과 이름이 같은 다른 함수가 존재할 수도 있다. 이름이 같은 함수가 여러 개 있을 때에는 함수 이름과 인수들의 데이터 형이 정확하게 일치하는 함수가 먼저 선택되어 호출되고, 그러한 함수가 없을 때에는 호출한 함수와 정확하게 일치시키는 변환이 가능한 함수 템플릿이 호출된다. 표준 템플릿 라이.. 2023. 9. 21.
[C++] 템플릿 (1) 컨테이너(container) 클래스 컨테이너 클래스란 다른 객체를 저장하는 클래스로서, 그 예로 스택, 큐, 배열, 리스트 등을 들 수 있다.동일한 유형의 컨테이너일지라도 저장하고자 하는 객체의 유형이 다르면 이에 맞게 새로운 클래스를 선언하여야 한다. 템플릿(template) 템플릿은 클래스를 선언할 때 객체의 자료형을 고려하지 않고, 객체의 자료형을 인수로 처리한다. 컨테이터 클래스를 선언할 때 특정 자료형이 아닌 일반적인 자료형을 대상으로 하는 템플릿을 작성한다. 특정 자료형을 위한 컨테이너 객체가 필요할 대 그 자료형을 템플릿의 매개변수로 전달하여 그 자료형에 해당되는 클래스가 자동적으로 선언되게 한다. 클래스 템플릿 선언 template class ClassTemplateName { .... }.. 2023. 9. 19.
[C++] 상속 (2) 정적 연결 포인터 혹은 참조에 의하여 함수가 호출될 때, 일반적으로 포인터의 유형에 따라 호출되는 멤버함수가 결정되는 방식 동적 연결과 가상 함수 프로그램이 실행될 때 실제 객체에 따라 멤버함수를 결정하는 방법 가상함수는 다음과 같이 기초 클래스의 함수 앞에 예약어 virtual을 붙여 표현한다. virtual ReturnType functionName(fParameterList); ※ ReturnType : 멤버 함수의 반환 자료형 ※ functionName : 멤버함수의 이름 ※ fParameterList : 멤버함수의 형식 매개변수 목록 상속관계에 있는 클래스들에 속하는 객체의 포인터 또는 참조 사이에 형 변환이 일어날 수 있다. 이때 파생 클래스를 기초 클래스로 변환하는 것을 업캐스팅이라 하고, .. 2023. 9. 17.
[C++] 상속 (1) 파생 클래스를 선언하는 방법 class DClassName : visibilitySpec BClassName { visibilitySpec_1: 데이터 멤버 또는 멤버함수 리스트; visibilitySpec_2: 데이터 멤버 또는 멤버함수 리스트; }; ※ DClassName : 파생 클래스 이름 ※ BClassName : 기초 클래스 이름 ※ visibilitySpec : 가시성 지시어 ☞ public, protected, private 파생 클래스는 파생 클래스의 이름 옆에 콜론(:)과 기초 클래스의 이름을 기록하여 선언한다. 기초 클래스의 멤버는 파생 클래스에 상속되어 마치 파생 클래스의 멤버인 것처럼 사용할 수 있다. 파생 클래스의 생성자는 기초 클래스의 생성자를 호출하고 나머지 필요한 부분만 정.. 2023. 9. 16.
[C++] 연산자 다중정의 (2) 문자열 클래스 C에서 문자열은 char형 배열 또는 char형 포인터를 이용하여 표현한다. 또한 문자열을 처리하기 위한 다양한 함수를 사용할 수 있다. C++에서도 C와 동일한 방법으로 문자열을 사용할 수 있다. MyString 클래스 C 스타일 문자열의 부족한 점을 보완 MyString 클래스의 연산자 연산자 기능 = 대입 및 이동 대입 연산자. C 스타일 문자열이나 MyString 객체를 복사 또는 이동한다. + 문자열 연결 연산자. 두 문자열을 연결한다. += 문자열을 뒤에 추가한다. ==, >, 2023. 9. 15.
[C++] 연산자 다중정의 (1) 연산자 다중정의(operator overloading)는 C++에서 제공하는 연산자를 사용자가 선언한 클래스의 객체에 대하여 사용할 수 있도록 다중정의하는 것이다. 단항 연산자의 다중정의 단항 연산자는 피연산자를 하나만 갖는 연산자로서, ++나 --와 같은 연사자가 그 예이다. 전위 표기법은 연산자가 피연산자 앞에 표기되는 형태이다. 전위 표기 단항 연산자를 다중 정의하는 구문 ReturnClass ClassName::operator opSymbol() { .... } ※ opSymbol() : ++, --등의 단항 연산자 기호 후위 표기법은 전위 표기법과 반대로 연산자를 뒤에 기입하는 방법이다. 후위 표기법을 사용하는 연산자를 정의하는 구문 ReturnClass ClassName::operator op.. 2023. 9. 6.
[C++] 클래스와 객체(2) 디폴트 생성자 디폴트 생성자는 매개변수가 없는 생성자 또는 매개변수가 있지만 모두 디폴트 값이 있는 디폴트 인수만 포함하고 있는 생성자이다. class Counter { int value; public: Counter() {} //디폴트 생성자 ..... }; Counter 클래스의 객체를 생성하면 데이터 멤버가 초기화되지 않은 상태로 객체가 만들어진다. 객체 배열 디폴트 생성자는 인수를 전달할 필요가 없기 때문에 이러한 형식으로 객체 배열을 선언하는 문장을 사용할 수 있다. 복사 생성자 복사 생성자란 같은 클래스의 객체를 복사하여 객체를 만드는 생성자이다. 만일 복사 생성자를 명시적으로 선언하지 않으면 컴파일러는 원본 객체의 멤버들을 그대로 복사하여 객체를 정의하는 복사 생성자를 자동으로 만든다. 이동.. 2023. 9. 5.
[C++] 클래스와 객체(1) 객체지향 언어의 효시는 1967년에 발표된 Simula 67이다. 그 이름을 통해 예상할 수 있는 것처럼 Simula는 시뮬레이션(simulation)을 위해 개발된 언어이다. 시뮬레이션이란 현실세계에 존재하는 여러 가지 개체와 이들이 상호작용하는 과정을 컴퓨터를 통해 가상으로 수행하는 것이다. 이처럼 객체지향 개념의 태동이 시뮬레이션과 관계가 있다는 점은 객체지향을 이해하는 데 큰 의미가 있다. 즉, 분석의 출발점이 '어떠한 프로세스를 통해 작업을 수행하는가'가 아니라 '현실세계를 시뮬레이션하는 컴퓨터 내의 가상세계 안에 어떠한 개체들이 존재하는가'이다. 시뮬레이션의 대상이 되는 개체들은 각각 정해진 동작을 하며, 그 과정에서 개체 각각의 내부 상태가 변화할 것이다. 행위와 데이터를 결합하여 놓은 것이.. 2023. 9. 4.
[C++] 함수 함수를 정의하는 일반적인 형식 ReturnType functionName(fParameterList) //머리부(header) {//몸체 블록 Type1 localVar1;//지역변수 선언 type2 localVar2; .... statement1;//처리할 작업을 수행하는 문장 statement2; .... return returnExpression; //결괏값을 반환함 } 값을 반환할 필요가 없을 때는 void형 사용 fParameterList는 형식 매개변수 함수를 호출할 때에는 함수의 이름과 함께 필요한 인수를 전달한다. 1. functionName(aParameterList); //void형 함수나 반환된 값을 사용할 필요가 없을 때 2. varName = functionName(aParamet.. 2023. 8. 30.