본문 바로가기

C++12

C++ | 04-3 생성자와 소멸자(Constructor and Destructor) 1. 생성자 1.1 생성자의 선언과 정의 새로운 객체를 생성하고 멤버 변수를 private으로 선언하면 이 멤버 변수를 초기하는 멤버 함수를 부득이하게 정의해야 했다. 그러나 멤버 변수를 초기화하기 위해 매번 멤버 함수를 정의하는 것은 여간 번거로운 일이 아니다. 다행히 C++는 특별한 멤버 함수, 생성자(Constructor)를 제공한다. 생성자는 객체의 생성과 동시에 멤버 변수를 초기화해주는 멤버 함수로 객체를 생성할 때 딱 한 번만 호출된다. 생성자를 정의하려면 다음과 같은 형식을 따르면 된다. ① 클래스의 이름과 같다. 생성자는 클래스의 이름과 완전히 같고, 보통 public으로 선언한다. class Overwatch { private: string name; int age; public: /* .. 2021. 8. 10.
C++ | 04-2 캡슐화(Encapsulation) 1. 캡슐화 1.1 캡슐화의 이해 캡슐화(Encapsulation)는 객체와 관련있는 필드(Field)와 메소드(Method)을 멤버 변수와 멤버 함수로 구현하여 하나로 묶고, 객체에서 구현한 내용을 외부로부터 감추어 은닉하는 것을 말한다. 2. 다양한 클래스의 정의 문제 풀이 2021. 8. 10.
C++ | 04-1 정보 은닉(Information Hiding) 1. 정보 은닉 1.1 정보 은닉의 이해 C++는 구조체 외부에서 구조체의 모든 멤버 변수와 멤버 함수에 쉽게 접근할 수 있다. 하지만 클래스는 객체지향 언어가 지향하는 정보 은닉(Information Hiding)을 고려해야 한다. 정보 은닉이란 클래스 외부에서 멤버 변수에 함부로 접근할 수 없게 하고 대신 클래스 내부에서 간접적으로 접근하는 멤버 함수를 정의하여, 안전하고 올바른 방향으로 멤버 변수에 접근할 수 있도록 유도하는 것을 말한다. 바로 이 정보 은닉을 위해 C++는 접근제어 지시자(Access Control Specifiers) 키워드를 제공하고, 클래스 외부에서 멤버 변수 또는 멤버 함수로 접근할 수 없게 한다. 접근제어 지시자 키워드는 private, protected, 그리고 publ.. 2021. 8. 9.
C++ | 03-1 구조체(Structure) 1. 구조체 2021. 8. 8.
C++ | 02-3 C++에서 C언어 표준함수 호출하기(C Standard Library) 1. C++에서 C언어 표준 함수를 호출하기 1.1 C언어 표준 함수 C언어의 라이브러리는 매우 다양한 유형의 함수들이 정의되어 있다. 그런데 이러한 함수들은 C++ 표준 라이브러리에 역시 포함되어 있어 어렵지 않게 사용할 수 있다. C++에서 C언어의 표준 함수를 호출하기 위해서 헤더 파일의 확장자인 .h를 생략하고 가장 앞에 c를 붙이면 C++의 헤더 파일 이름이 된다. C언어 C++ 함수 #include #include printf, scanf, puts, gets, etc #include #include atoi, itoa, rand, srand etc #include #include time, clock, etc #include #include abs, sqrt, sin, cos, etc #in.. 2021. 8. 2.
C++ | 02-2 malloc과 free를 대신하는 new와 delete 1. malloc과 free를 대신하는 new와 delete 1.1 동적할당을 위한 new와 delete 데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임(Compile Time)에 미리 결정된다. 하지만 힙 영역의 크기는 프로그램이 실행되는 도중인 런 타임(Run Time)에 사용자가 직접 결정하게 된다. 이렇게 런 타임에 메모리를 할당받는 것을 메모리의 동적할당(Dynamic Allocation)이라고 한다. C언어는 malloc과 free 함수를 통해 동적할당을 할 수 있으나, C++는 메모리의 동적할당을 위해 더욱 효과적인 new와 delete 연산자를 제공한다. 1.2 변수, 배열, 객체의 동적할당 동적할당에 사용되는 포인터의 가장 큰 목적은 이름없는 메모리를 포인터에 할당하여 할.. 2021. 8. 2.
C++ | 02-1 참조자(Reference) 1. 참조자(References) 1.1 참조자의 이해 참조자는 성격상 포인터와 비유되기 쉬운 개념으로, 참조자를 이해하기 위해서 먼저 변수의 개념을 살펴봐야 한다. 우선, 변수란 할당된 메모리 공간에 붙여진 이름으로, 사용자는 변수를 통해 해당 메모리 공간에 접근할 수 있다. 그런데 C++는 &연산자를 사용하여 할당된 메모리 공간에 둘 이상의 이름을 부여할 수 있는데 이것을 가리켜 참조자(Reference)라고 한다. int num1 = 2021; int& num2 = num1;/* 변수 num1에 대한 참조자 num2를 선언합니다. */ int* ptr = &num1/* 변수 num1의 주소를 포인터 ptr에 저장합니다. */ 참조자의 이해를 위해서 변수 num1과 참조자 num2를 선언하였다. 위의.. 2021. 8. 2.
C++ | 01-5 이름공간(Namespace) 1. 이름공간(Namespace) 1.1 이름공간의 등장 여러 사람이 공동으로 모여 규모가 큰 프로그램을 개발하면 변수와 함수의 이름이 중복되는 경우가 발생한다. 예를 들어, RPG 게임을 개발하는데 두 회사가 참여했다고 생각해보자. 두 회사는 열심히 프로그램을 작성하였고, 6개월 후 각각 맡은 부분을 하나로 통합하려고 한다. 그런데 주인공의 공격 함수의 이름과 몬스터의 공격 함수의 이름이 Attack으로 우연히 같다는 것을 알게 된다. 함수의 이름이 같으니 충돌이 발생하고, 결국 프로그램에서 Attack 함수를 사용하는 부분을 전부 수정해야하는 골치 아픈 문제가 발생한 것이다. C++는 이름공간(Namespace)을 통해 이러한 문제를 근본적으로 해결할 수 있다. 1.2 이름공간의 선언과 정의 이름공간.. 2021. 7. 31.
C++ | 01-4 인라인 함수(Inline Function) 1. 인라인 함수(Inline Function) 1.1 인라인 함수의 선언과 정의 C언어의 매크로 함수는 일반적인 함수보다 실행 속도가 빠르다는 장점을 가지고 있지만 정의하기가 상대적으로 어려워 복잡한 함수를 매크로 형태로 사용하는데 한계가 있다. 이 매크로 함수의 단점을 없앤 인라인 함수는 매크로 함수를 일반 함수처럼 정의할 수 있게 해준다. 인라인 함수를 정의하려면 다음과 같은 형식을 따르면 된다. inline functionType functionName(...) { statements; } InlineFunction.cpp #include // #define SQUARE(X) ((X)*(X))는 매크로 함수입니다. inline int SQUARE(int x) {// 이것은 인라인 함수입니다. re.. 2021. 7. 24.
C++ | 01-3 매개 변수의 디폴트 값(Default Value) 1. 매개 변수의 디폴트 값(Default Value) 1.1 디폴트 값의 이해 C++는 함수를 선언할 때 매개 변수에 기본 값을 지정하여 선언할 수 있다. 이것을 디폴트 매개 변수라고 하며. 디폴트 매개 변수가 선언된 함수를 호출할 때 사용자가 매개 변수에 인자를 전달하면 전달된 인자를 사용한다. 그러나 이 함수를 호출할 때 사용자가 인자를 전달하지 않으면, 미리 지정해놓은 기본 값을 매개 변수의 인자로 대신 전달한다. DefaultValue.cpp #include int Add(int num1 = 1, int num2 = 2);// 매개 변수 num1과 num2에 각각 디폴트 값 1, 2를 지정한다. int main(void) { std::cout 2021. 7. 24.
C++ | 01-2 함수 오버로딩(Function Overloading) 1. 함수 오버로딩(Function Overloading) 1.1 함수 오버로딩의 이해 C언어는 동일한 이름의 함수가 두 개 이상 정의되는 것을 허용하지 않는다. 그러나 C++는 매개 변수의 선언 형태가 다르면 동일한 이름의 함수를 정의하는 것을 허용한다. 이것은 전달되는 인자를 통해 호출하고자 하는 함수를 구분할 수 있기 때문인데, 이러한 형태의 함수 정의를 함수 오버로딩(Function Overloading)이라고 한다. 같은 이름의 함수를 정의하기 위해서는 다음과 같은 형식을 따르면 된다. functionType funtionName(variableTypeA variableName); functionType funtionName(variableTypeB variableName); functionTy.. 2021. 7. 22.
C++ | 01-1 입출력 방식 std::cout과 std::cin 1. printf를 대신하는 std::cout 1.1 std::cout C언어는 stdio 헤더 파일의 printf를 통해 데이터를 출력하지만, 일반적으로 C++는 iostream 클래스의 cout을 통해 데이터를 출력한다. 콘솔창에 데이터를 출력하기 위해서는 다음과 같은 형식을 따르면 된다. std::cout num2; int result = num1 + num2; std::cout '변수'; 3. C++ 기반의 데이터 입출력 문제 풀이 열혈 C++ 프로그래밍 | 문제 01-1 | C++ 기반의 데이터 입출력 문제 1 사용자로부터 총 5개의 정수를 입력받아서, 그 합을 출력하는 프로그램을 작성해보자. 단, 프로그램의 실행은 다음과 같아야 한다. [실행의 예] 1번째 정수 입력: 1 2번째 정수 입력: .. 2021. 7. 22.