
C++에 대해서 공부해볼 것이다. 이전 파이썬과 C에서 공부하던 방식과 비슷하겠지만 또 다른 부분도 있을 것이다. 차근차근 알아가보자.HelloWorld.cpp C언어에서는 print함수와 scanf함수 호출을 목적으로 헤더파일 <stdio.h>를 포함했으나, C

사용자로부터 총 5개의 정수를 입력 받아서, 그 합을 출력하는 프로그램을 작성해 보자. 단, 프로그램의 실행은 다음과 같이 이뤄져야 한다.이는 데이터의 입력에 사용되는 std::cin을 활용하면 된다. 그리고 for문을 활용해 1번째부터 5번째까지 입력받으면 된다.위는

C언어에서는 다음과 같이 동일한 이름의 함수가 정의되는 것을 허용하지 않는다. 함수의 이름이 같아 컴파일 에러가 발생한다.int MyFunc(int a, int b) { return a+b;}int main(void) { MyFunc(20); //MyFunc(in

다음 main 함수에서 필요로 하는 swap 오버로딩 해서 구현해보자.실행의 예실행의 예와 같이 나오려면 <num1, num2>, <ch1, ch2>, <db1, db2> 괄호 안의 값을 각각 교환을 해주게끔 해야한다. 그러니까..이렇게 말이다.main

C++함수에는 '디폴트 값'이라는 것을 설정할 수 있다.여기서 말하는 '디폴트 값'이란 '기본적으로 설정되어 있는 값'을 의미한다.int MyFuncTwo(int num1=5, int num2=7) { return num1+num2;}int num=7"함수호출 시 인자

예제 DefaultValue3.cpp에 정의된 함수 BoxVolume를 '매개변수의 디폴트 값 지정' 형태가 아닌, '함수 오버로딩'의 형태로 재 구현해보자. 물론 main함수는 변경하지 않아야 하며, 실행결과도 동일해야 한다.위의 메인함수를 건들지 않고 같은 실행결과

'inline 함수'라는 이름의 의미부터 이해해보자. in은 '내부'를 의미, line은 '프로그램 코드라인'을 의미한다. 의역해보면, '프로그램 코드라인 안으로 들어가 버린 함수'라는 뜻이 된다.매크로 함수의 형태는 매크로 함수의 장점은 다음과 같다.단점은,C언어를

프로그램이 대형화되어 가면서 이름의 충돌문제가 등장했다.회사 세 군데에서 은행관리 시스템을 개발하는데, A회사가 B회사의 코드를 많이 베껴 구현해 함수의 이름들이 거의 다 같은 것이 아닌가?함수의 이름을 하나하나 바꾸기엔 너무나도 힘든 일이다.그렇다면 무엇이 해결책이었

C++을 제대로 공부하려면 다음의 내용을 잘 알고 있어야 한다.앞서 소개한 예제 NameSp2.cpp를 다음과 같이 총 3개의 파일로 분할해서 컴파일 해보자.SimpleFunc.hSimpleFunc.cppSimpleMain.cpp

'은행계좌 관리 프로그램'프로젝트 01단계에서는 C 스타일로 구현하는 것을 목표로 한다. 구현할 기능은 다음과 같다.그리고 프로그램의 간결성을 위해 몇가지 가정을 하겠다.계좌개설계좌ID: 428이 름: 김민성입금액: 15000\-----Menu------1\. 계좌개설

키워드 const는 어떠한 의미를 갖는가? 다음 문장들을 대상으로 이를 설명해보자이는 변수 num을 상수화 한다는 의미이다.ptr1을 이용해서 val1의 값을 변경할 수 없고, ptr1의 값은 변경 가능하다. ptr1이 가리키는 대상을 바꿀 순 없다.즉, 정리하자면 포

정수 0은 '거짓', 그리고 0이 아닌 모든 정수는 '참'을 의미하는 숫자로 정의하고 있다. 따라서 참과 거짓의 표현을 위해 보통 다음과 같이 상수를 정의한다.그러나 C++에서는 참과 거짓의 표현을 위한 키워드 true와 false를 정의하고 있기에 굳이 매크로 상수를

변수는 할당된 메모리 공간에 붙여진 이름이다. 그 이름을 통해서 메모리 공간에 접근이 가능하다. 그러면 할당된 하나의 메모리 공간에 둘 이상의 이름을 부여할 순 없을까?이 때, num2는 num1의 '참조자'가 된다.여기다가 다음의 문장을 실행하면,변수 num1의 메모

이번에는 참조자의 활용과 관련해 다루려 한다.우리가 C언어를 공부하면서 배운 함수의 두 가지 호출방식은 다음과 같다.Call-by-value값을 인자로 전달하는 함수의 호출방식Call-by-reference주소 값을 인자로 전달하는 함수의 호출방식Call-by-valu

길이정보를 인자로 받아서, 해당 길이의 문자열 저장이 가능한 배열을 생성하고, 그 배열의 주소 값을 반환하는 함수를 정의해보자.MemMalFree.cpp위의 코드를 살펴보면,문자열 저장을 위한 배열을 힙 영역에 할당하고 있다.힙에 할당된 메모리 공간을 소멸한다.위 예제

헤더파일의 확장자인 .h를 생략하고 앞에 c를 붙이면 C언어에 대응하는 C++의 헤더파일 이름이 된다.따라서 쉽게 C언어의 함수를 C++에서도 호출할 수 있다. 다음 예제를 살펴보자.StdCPPFunc.cpp물론 stdio.h와 같은 C언어의 헤더파일을 이용해도 되지만

참조자를 이용해서 다음 요구사행에 부합하는 함수를 각각 정의하여라.\-> 인자로 전달된 int형 변수의 값을 1씩 증가시키는 함수\-> 인자로 전달된 int형 변수의 부호를 바꾸는 함수위의 코드를 분석해보자.이는 인자로 전달된 int형 변수의 값을 1씩 증가시키는 함수

구조체가 주는 이점은 다음과 같다."연관 있는 데이터를 하나로 묶으면, 프로그램의 구현 및 관리가 용이하다."위에서 말하듯이, 구조체는 연관있는 데이터를 묶을 수 있는 문법적 장치로 데이터의 표현에 매우 큰 도움을 준다.예를 들어, 레이싱게임의 캐릭터로 등장하는 '자동

03-1에서 설명한 C++의 구조체는 클래스의 일종이다. 그렇다면 클래스와 구조체의 차이점은 뭘까?키워드 struct를 대신해 class를 사용하면, 구조체가 아닌 클래스가 된다. 아래의 코드는 클래스의 정의이다.키워드 struct가 아닌 class를 사용한 것이 코드

C++에서 말하는 객체(Object)의 의미는 이것이다."사물, 또는 대상"즉, Object는 우리 주변에 존재하는 물건(연필, 지갑 등)이나 대상(철수, 친구, 선생님 등) 전부를 의미한다. 그렇다면 객체지향 프로그래밍으 무엇인가? 예를 들어서 다음 상황을 시뮬레이션

2차원 평면상에서의 좌표를 표현할 수 있는 구조체를 다음과 같이 정의하였다.위의 구조체를 기반으로 다음의 함수를 정의하고자 한다(자세한 기능은 실행의 예를 통해서 확인하도록 한다.)단, 위의 함수들을 구조체 안에 정의를 해서 다음의 형태로 main 함수를 구성할 수 있

윈도우의 그림판과 같은 성격의 프로그램을 C++을 이용해 구현한다고 가정해보자. 그럼 다양한 종류의 클래스를 정의해야할 것이다. 특히 다음과 같이 점의 위치좌표를 표현하는 목적의 클래스는 기본적으로 필요하다.우리는 위 클래스를 가지고 정보은닉에 대해 이야기를 해보고자

콘택600이라는 코과 관련 있는 증상의 감기약이 있다. 콘택600을 예로 들면서 캡슐화를 설명해보겠다.콘택600이 복용자에게 제공되는 기능은 "재채기, 콧물, 코막힘"의 완화이다. 그런데 이러한 콘택600이 재채기용 캡슐, 콧물용 캡슐, 그리고 코막힘용 캡슐로 나눠져

지금까지 private으로 선언된 멤버변수들을 초기화하기 위해 InitMembers라는 함술르 정의하고 호출했다. 여간 귀찮은 일이 아니다. 하지만 '생성자'라는 것을 이용하면 객체도 생성과 동시에 초기화할 수 있다.이러한 유형의 함수를 가리켜 '생성자'라고 하고, 다

객체 기반의 배열은 다음의 형태로 선언한다(SoSimple이 클래스 이름이다).이를 동적으로 할당하는 경우에는 다음의 형태로 선언한다.이러한 형태로 배열을 선언하면, 열 개의 SoSimple 객체가 모여서 배열을 구성하는 형태가 된다. 이렇듯 구조체 배열의 선언과 차이

복사생성자를 왜 정의해야 하는 걸까? 대입연산 즉, 새로운 객체를 기존의 객체로 초기화하는 대입연산의 결과를 우리가 정의하게끔 하도록 하기 위해서이다.위의 두 가지 초기화 방식은 결과적으로 동일하다.그렇다면 이야기를 객체의 생성으로 옮겨가 보자.위의 코드 중에서 다음

디폴트 복사 생성자는 멤버 대 멤버의 복사를 진행한다. 이러한 방식의 복사를 '얕은 복사'라고 하는데, 이는 멤버변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다. 다음 예제를 통해 문제를 확인해보자.ShallowCopyError.cpp실행 결과를 보면, 문자열

복사 생성자가 호출되는 시점은 크게 세가지로 구분할 수 있다.이들은 모두 다음의 공통점을 가진다."객체를 새로 생성해야 한다. 단, 생성과 동시에 동일한 자료형의 객체로 초기화해야 한다!"복사 생성자의 호출시기를 논하기에 앞서, 먼저 메모리 공간이 할당과 동시에 초기화

다음과 같이 변수를 상수와 하듯이,다음과 같이 객체도 상수화할 수 있다.그리고 이렇게 객체에 const 선언이 붙게 되면, 이 객체를 대상으로는 const 멤버함수만 호출이 가능하다. 이는 객체의 const 선언이 다음의 의미를 갖기 때문이다."이 객체의 데이터 변경을

A 클래스가 B 클래스를 대상으로 friend 선언을 하면, B 클래스는 A 클래스의 private 멤버에 직접 접근이 가능하다.단, A클래스도 B 클래스의 private 멤버에 직접 접근이 가능 하려면, B 클래스가 A 클래스를 대상으로 friend 선언을 해줘야 한

C언어에서의 static은 C++에서도 그대로 통용된다. 그러나 C++에서는 멤버변수와 멤버함수에 static 선언을 추가할 수 있다. C언어에서 공부한 static의 개념을 정리해보자.전역변수에 선언된 static의 의미\->선언된 파일 내에서만 참조를 허용하겠다는

C++의 상속은 그 단어의 의미처럼 물려 받는다는 성격이 강하다. 따라서 과거에서는 다음과 같은 생각을 가지고 상속을 바라봐 왔다."기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소가 상속이다."물론 상속에는 이러한 이점도 존재하지만, 이는 '상속'을