본문 바로가기

C++

(7)
클래스 외부에 멤버 함수 구현하기 클래스 내부의 멤버 함수 클래스는 객체를 정의하기 위한 문법으로 내부에 멤버 변수와 멤버 함수를 선언할 수 있다고 했다. 간단한 클래스의 경우에는 멤버 함수의 구현부가 다 들어가도 상관 없겠지만, 복잡한 클래스의 경우에는 상당한 수의 멤버 함수가 들어갈 것이고, 멤버 함수의 소스코드도 길어질 것이다. 이렇게 되면 클래스 내에 어떤 함수들이 있는지 파악하기 어려워질 것이고 결국에는 클래스 함수의 관리가 힘들어질 것이다. 클래스 외부에 멤버 함수 구현하기 앞서 스코프 연산자에 대해 설명했다. 이는 종속 관계를 표시하는 연산자로서 이를 활용하면 'C++' 클래스 문법의 멤버 함수를 내부에서 외부로 끌고 나올 수 있다. 클래스 내부에는 멤버 함수의 원형만 선언하고 나머지 구현부는 클래스 외부에 '::'을 사용해..
네임스페이스 (Namespace) 이름의 중복 문제 프로그래밍을 개인적으로 하는 경우에는 이름의 중복 문제가 발생하는 경우가 많이 없다. 왜냐하면 혼자서 이름을 짓기 때문이다. 하지만, 개인이 아닌 여러명이 프로그래밍을 하는 경우를 생각해보자. 네이밍을 단순하게 하다보면 이름의 중복 문제가 발생할 가능성이 생기게 된다. 이런 상황에서 C언어의 경우에는 변수 및 함수, 그리고 그 와 관련된 코드들을 일일이 찾아서 수정해줘야 한다. 상상만으로도 귀찮은 일이다. 네임스페이스 C++에서는 위와 같은 문제를 해결하기 위해서 이름으로 소스 코드의 변수와 함수를 그룹짓는 문법을 제공한다. 간단한 예를 들어 알아보자. //a의 작업 int data1, data2; int ShowData(){ } //b의 작업 int data1, data2; int S..
객체 파괴자 프로그램에서 마무리 작업 컴퓨터에서는 하나 이상의 프로그램들이 동시에 실행되고 있다. 컴퓨터가 제공하는 여러 자원을 사용하다가 제대로 정리하지 않고 프로그램을 종료하게 되면 해당 자원을 다른 프로그램이 사용하지 못할 수도 있다. 이와 같은 맥락으로 프로그램은 객체들에게 자원을 제공한다고 생각하면 된다. 따라서 생성 된 객체들은 사용이 끝날 때에 같은 프로그램 내에서 실행 중이거나 새롭게 생성될 객체를 위해서 정리를 해주어야 한다. 간단한 예를 들어보겠다. #include #include #include class MyString { private: char *mp_string; public: MyString() { mp_string = NULL; } void SetString(char *p_string)..
객체 생성자 프로그램에서 초기화 작업 초기화 작업이란 프로그램이 작업을 시작하기 위해서 변수 등의 상태 값을 설정해주는 것을 말한다. 간단한 프로그램을 예를 들어보자. #include int main() { int sum = 0, num = 0, i = 0; while(i++ < 5){ printf("%dth : ", i); scanf("%d", &num); sum = sum + num; } printf("sum = %d\n", sum); return 0; } 위의 프로그램은 5개의 숫자를 입력받아 더한 결과값을 출력하는 프로그램이다. 'main' 함수의 첫번째 명령문과 같이 변수에 값을 대입하는 작업이 바로 초기화 작업이다. 위의 소스를 C++의 클래스 문법을 사용하여 변환해보겠다. #include class My..
오버로딩(Overloading) 오버로딩이란? 오버로딩의 사전적 의미를 먼저 알아보자. '과적'이라는 의미를 가지고 있다. 프로그래밍에서 이러한 의미를 가진 단어를 사용하는 이유는 무엇일까? 먼저 우리는 C언어를 공부하면서 컴퓨터의 명령어는 기본적으로 한가지의 의미를 가지고 있다고 배웠다. 하나의 명령어가 두 개 이상의 의미를 가지고 있으면 컴퓨터는 해당 명령어에서 어떤 의미로 해석해야할 지 구분하지 못한다. 이렇게 기계어로 이루어진 명령어를 인간이 이해하기 쉽게 만든 C언어에서도 원칙을 지키고 있다. 하나의 키워드나 예약어 또는 사용자에 의해 정의된 함수명들은 하나의 의미를 가지도록 되어 있다. C++에서는 C언어보다 다양한 조건으로 명령어을 해석하도록 개선되어 있다. 그래서 한 개의 명령어가 두 개 이상의 의미를 가지는 것이 가능해..
클래스(Class) C언어 구조체 사용하여 프로그래밍 C언어를 접해본 사람이라면, 구조체에 대해 알 것이다. C++에서의 클래스 개념은 구조체 개념이 확장된 것이라고 생각하면 쉽다. 어떻게 확장된 것인지 알아보기 위해 예를 들어서 알아보겠다. 먼저 C언어로 간단한 개인 정보를 입력받고 출력하는 프로그램을 만들어 보겠다. #include typedef struct People { char name[10]; short age; double height; }PI; void AddPeople(PI *p) { printf("Input information\n"); printf("name : "); scanf("%s", p->name); printf("age : "); scanf("%hd", &p->age); printf("heigh..
C++ 개요 C++이란? C언어의 문법에 객체 지향을 지원하는 새로운 문법을 추가한 언어라 생각하면 쉽다. 새로운 문법이나 기술들이 추가되었지만, 기본 문법은 C언어와 동일하기 때문에 C언어처럼 사용할 수도 있다. 객체(Object)란? C++에는 객체라는 개념이 추가되었다. 그렇다면 객체란 무엇일까? 여러가지 작업이나 그에 필요한 정보들을 하나의 단위로 만들어 놓은 것이라 생각하면 쉬울 것이다. 예를 들어, 커피를 만드는 작업을 생각해보자. 커피 하나를 만드는데에도 여러가지 작업이 필요하다 먼저 커피를 만들기 위한 재료를 준비해야 한다. 그리고 그 재료를 이용해서 커피를 만들어야 한다. 만들어진 커피를 마시는 것으로 작업이 마무리가 된다. 여기서 커피 재료를 데이터라 생각하고, 커피를 만드는 작업을 데이터를 관리하..