목록프로그래밍 언어/C & C++ (27)
알버트의 개발하는 블로그
이번 시간에는 함수의 다형성에 대해서 배워보겠습니다. 이 개념은 자바에서도 많이 쓰이는 개념으로 꼭 알고 자바로 넘어가야 합니다. 다형성이란? 다형성이란 이름이 같은 함수가 서로 다른 여러 클래스에서 다양하게 실행되는 것을 말합니다. 이름이 같은 함수이지만 기능을 다르게 하고 싶을 때 많이 쓰입니다. 다형성을 구현할 함수가 포함된 모든 클래스는 같은 부모 클래스를 상속받아야 합니다. 그리고 부모와 자식이 같은 이름의 함수를 가지고 있어야 하는데요. 부모 클래스로부터 상속받은 함수(순수 가상 함수)를 반드시 자식 클래스에서는 재정의(오버라이딩)시켜 사용해야 합니다. 그리고 이렇게 순수가상함수를 포함한 부모 클래스를 추상 클래스라고 하며 이는 자바에서도 많이 쓰이는 개념입니다. 이제 간단한 예제를 통해서 다..
이번 시간에는 코딩 문제에서 많이 쓰이는 기법 중에 하나인 '재귀 함수'에 대해서 익혀보겠습니다. 함수는 함수 안에서 자기 자신을 호출할 수 있습니다. 재귀는 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법입니다. 처음에는 좀 이상해 보이지만, 사실 재귀는 정말 효과적이고 흥미로운 프로그래밍 기법입니다. 3가지 예제를 통해서 재귀 함수에 대해서 익혀보도록 하겠습니다. 재귀 함수로 팩토리얼 구하기 팩토리얼의 정의는 n! = n * (n-1)! 입니다. (단, n이 0일땐 n!은 1) 위의 정의에선 n!을 정의하는데 (n-1)! 가 다시 사용된 것을 알 수 있습니다. 이를 코딩을 통해서 함수로 구현해보겠습니다. #include long factorial(int n) { printf("factor..
이번 시간에는 클래스의 객체가 생성될때 생성되는 생성자함수와 소멸될 때 소멸되는 소멸자 함수를 배워보겠습니다. 소멸자 함수는 생성자 함수와 다르게 객체가 소멸될 때 실행되는 함수입니다. 따라서 만약 클래스에서 동적으로 할당된 메모리가 있다면 소멸자 함수에서 메모리 해제를 해줄 수 있습니다. 간단한 예제를 통해서 생성자 함수와 소멸자 함수를 익혀보겠습니다. 생성자 소멸자 함수 예제 #include #include using namespace std; class Member { private ://Member 클래스의 객체들 생성 char *name;//포인터로 생성해서 동적 할당 int age; public : Member(const char *name, int age) { this->name = new ..
이번 시간에는 상속에 대해서 배워보겠습니다. 상속이라는 것은 c++에서 제공하는 클래스와 연관이 깊은 기능입니다. 사실 상속처럼 객체와 연관이 깊은 부분은 자바같은 객체지향 프로그래밍 언어에서 더 많이 쓰이긴 합니다. 하지만 c++에서도 제공하는 기능이랍니다. c++에서 제공하는 클래스와 상속에 대해서 짧게 짚고 넘어가보도록 하겠습니다. 상속이란? 상속이란, 말 그대로 부모의 재산을 자식이 그대로 갖다 쓴다는 것을 말합니다. 부모님이 돌아가시면 자식이 그 재산을 물려받는 것처럼, 부모의 재산(변수, 함수) 등을 자식이 그대로 갖다 쓸 수 있는 것을 말합니다. 그래서 자식 클래스는 부모 클래스의 재산을 그대로 갖다 쓸 수 있습니다. 즉, 상속이란 부모 클래스에서 정의한 모든 멤버 변수와 함수를 자식 클래스..
Static (정적) 멤버 변수란? 이번 시간에는 클래스의 멤버 변수 중에 하나인 static 멤버 변수에 대해서 알아보겠습니다. 클래스 멤버 변수는 크게 정적(static) 멤버 변수와 인스턴스 멤버 변수로 구분할 수 있습니다. static이란 뜻은 '고정된'이란 뜻을 가지고 있습니다. 즉, 한번 선언되면 쭉 그 자리에 박혀있다는 뜻입니다. 정적 멤버 변수는 현재 클래스의 객체가 최초로 생성될 때 딱 1번만 메모리에 생성되고 초기화가 되고 그 자리에 쭉 고정되어 사용되어 집니다. 그래서 같은 클래스로 생성되는 모든 객체가 공유해서 사용할 수 있습니다. static 멤버변수와 다르게 인스턴스 멤버 변수는 현재 클래스로 생성되는 모든 객체에서 각각 독립된 메모리를 가집니다. Static 멤버 변수 쓰는 법..
이번 시간에는 우리가 c에서 클래스를 생성했을 때 자동으로 함께 생성되는 생성자 함수에 대해서 자세히 살펴보겠습니다. 생성자 함수란? 생성자 함수는 말 그대로, 클래스가 생성됐을 때 함께 '생성'되는 함수입니다. 저번 시간에 클래스를 선언할 때 이렇게 선언된다고 하였는데요. class 클래스명 { [접근 권한 지정자:] //생략 가능, 생략시 private이 기본 접근 권한으로 사용된다. 클래스 멤버 변수 선언;...; [접근 권한 지정자:] [생성자 함수] 클래스 멤버 함수 선언... }; 이 구조에서 [생성자 함수]가 눈에 띄실 겁니다. 클래스를 생성할 때 자동으로 생성되는 생성자 함수는 주로 클래스변수들의 초기화에 많이 사용됩니다. 생성자 함수의 규칙 단, 생성자 함수를 쓸 때는 규칙이 있습니다. ..
이번 시간에는 c언어에서 제공하는 기능 중에 하나인 클래스(class)에 대해서 한번 배워보겠습니다. 클래스란? 클래스는 구조체처럼 다양한 변수를 포함할 수 있습니다. 하지만 클래스는, 구조체와는 다르게 함수도 포함할 수 있습니다. 구조체는 단지 그 안에 자료형만을 포함하고 있었습니다. 하지만 클래스는 자료형을 포함할 뿐 아니라 그 안에 함수(메소드)까지 포함하고 있습니다. 클래스의 구조를 살펴보면, class 클래스명 { [접근 권한 지정자:] //생략 가능, 생략시 private이 기본 접근 권한으로 사용된다. 클래스 멤버 변수 선언;...; [접근 권한 지정자:] [생성자 함수] 클래스 멤버 함수 선언; ...}; 이와 같은 구조를 가지게 됩니다. 구조체랑 비교해보면 struct 구조체명 { 구조체..
이번 시간에는 좀 간단한 프로그램을 코딩해보겠습니다. 제가 자주 이용하는 '코딩도장'(http://codingdojang.com/)이라는 사이트에서 가져온 문제인데요. 원하는 숫자의 개수만큼 숫자를 입력하고 그 숫자들의 평균을 구해주는 프로그램입니다. 먼저, 원하는 숫자의 개수만큼 숫자를 입력하려면 메모리 동적 할당을 통해서 숫자만큼의 배열을 생성해주어야 할 것입니다. 코딩과 실행 결과 대표사진 삭제 사진 설명을 입력하세요. 코딩을 해보면 이와 같습니다. 숫자의 개수를 받는 변수 n, 합을 저장할 변수 sum, 평균을 저장할 변수 average가 선언합니다. scanf를 통해서 n의 값을 입력받습니다. 그리고 나서 이 부분이 이 코딩의 핵심이라고 볼 수 있습니다. 바로 int *array = new in..