C++ 로컬 클래스란?함수 내부에 선언된 클래스를 C++에서는 로컬 클래스(local class)라고 부릅니다. 이름 그대로 해당 함수 안에서만 지역적으로 유효한 클래스이기 때문입니다.로컬 클래스의 기본적인 구조는 다음과 같습니다.#include<iostream> using namespace std; void func() { class LocalClass { }; } int main() { return 0; }위 예제에서 func()는 하나의 함수이며,
중첩 클래스(Nested Class)란 다른 클래스 내부에 선언된 클래스를 의미합니다. 중첩 클래스는 외부 클래스(바깥 클래스)의 멤버 변수처럼 취급되며, 해당 클래스의 다른 멤버들과 동일한 접근 권한을 가집니다.다만 주의할 점이 있습니다. 외부 클래스의 멤버 함수라고 해서 중첩 클래스의 멤버에 특별한 접근 권한을 갖는 것은 아닙니다. 즉, 중첩 클래스의 private 멤버에 접근하려면 일반적인 접근 규칙을 그대로 따라야 합니다.C++ 중첩 클래스 예제 코드다음은 C++에서 중첩 클래스를 사용하는 방법을 보여주는 프로그램입니다.#i
C++에서 생성자(Constructor)는 클래스의 새로운 객체가 생성될 때 자동으로 실행되는 특별한 멤버 함수입니다. 생성자는 클래스와 이름이 같아야 하며, void를 포함한 어떠한 반환 타입도 가지지 않는다는 특징이 있습니다. 생성자의 주된 용도는 객체가 생성되는 시점에 클래스의 멤버 변수에 초기값을 설정해 주는 것입니다.C++의 생성자는 크게 두 가지 유형으로 나눌 수 있으며, 각각의 특징과 사용법을 자세히 살펴보겠습니다.1. 기본 생성자(Default Constructor)기본 생성자는 매개변수를 받지 않는 생성자입니다. 프
복사 생성자(Copy Constructor)는 생성자의 한 종류로, 같은 클래스의 기존 객체를 이용해 새로운 객체를 생성하고 초기화하는 역할을 합니다. 만약 클래스 내에 복사 생성자가 정의되어 있지 않다면, 컴파일러가 자동으로 기본 복사 생성자를 만들어 줍니다.특히 포인터 변수나 동적 메모리 할당(dynamic memory allocation)을 사용하는 클래스에서는 얕은 복사(shallow copy)로 인한 문제(예: 이중 해제, 댕글링 포인터 등)를 방지하기 위해 복사 생성자를 직접 정의하는 것이 필수적입니다.복사 생성자 예제
C++에서 소멸자(Destructor)는 객체를 메모리에서 해제(소멸)하는 역할을 담당하는 클래스의 멤버 함수입니다. 소멸자는 함수가 종료되거나, 프로그램이 끝나거나, delete 연산자가 호출되는 등 클래스 객체가 선언된 범위(scope)를 벗어나는 시점에 자동으로 호출됩니다. 소멸자는 일반 멤버 함수와 달리 어떠한 매개변수도 받지 않고, 반환값도 없습니다. 또한 소멸자의 이름은 반드시 클래스 이름과 동일해야 하며, 이름 앞에 물결표(~) 기호가 붙는 것이 특징입니다. 소멸자의 주요 특징 클래스 이름 앞에 틸드(~)를 붙여 ~클
생성자(Constructor)는 클래스의 새로운 객체가 생성되는 순간 자동으로 실행되는 특수한 멤버 함수입니다. 생성자는 클래스와 동일한 이름을 가지며, 일반 함수와 달리 반환 타입이 없습니다(void조차 사용할 수 없습니다). 생성자는 주로 클래스의 멤버 변수에 초기값을 설정하는 용도로 활용됩니다.C++의 생성자는 크게 두 가지 유형으로 나눌 수 있습니다.기본 생성자(Default Constructor): 매개변수를 받지 않는 생성자매개변수 생성자(Parameterized Constructor): 매개변수를 통해 값을 전달받는 생
접근 지정자(Access Modifier)는 객체 지향 프로그래밍에서 데이터 은닉(data hiding)을 구현하기 위해 사용되는 핵심 도구입니다. 클래스 외부에서 내부 데이터에 함부로 접근하지 못하도록 통제함으로써, 코드의 안정성과 캡슐화를 보장할 수 있습니다.C++에는 세 가지 접근 지정자가 존재하며, 각각 다음과 같은 특징을 가집니다.public — 어디서든 접근 가능private — 클래스 내부에서만 접근 가능protected — 클래스 내부와 파생(자식) 클래스에서 접근 가능아래에서 각 접근 지정자를 예제 코드와 함께 자세
이진 검색(Binary Search)은 정렬된 배열에서 원하는 요소를 찾기 위해 배열을 반복적으로 절반으로 나누며 탐색 범위를 좁혀 가는 알고리즘입니다. 선형 검색이 모든 요소를 하나씩 확인하는 것과 달리, 이진 검색은 매 단계마다 탐색 대상을 절반으로 줄이므로 매우 빠른 속도를 자랑합니다.이진 검색의 동작 원리이진 검색은 전체 배열에서 시작합니다. 먼저 배열의 중앙에 있는 요소와 찾고자 하는 값을 비교하는데, 찾으려는 값이 중앙 요소보다 크면 배열의 상위 절반을, 작으면 하위 절반을 탐색 대상으로 삼습니다.이 과정은 다음 두 가지
정렬된 배열(Sorted Array)이란 배열의 모든 요소가 숫자 크기 순서나 알파벳 순서와 같은 특정 기준에 따라 오름차순 또는 내림차순으로 배치된 배열을 의미합니다.숫자 배열을 정렬하는 알고리즘은 매우 다양합니다. 대표적인 예로 버블 정렬(Bubble Sort), 삽입 정렬(Insertion Sort), 선택 정렬(Selection Sort), 병합 정렬(Merge Sort), 퀵 정렬(Quick Sort), 힙 정렬(Heap Sort) 등이 있습니다. 이 글에서는 그중 선택 정렬을 이용해 배열을 정렬하는 방법을 자세히 살펴보겠
희소 행렬(Sparse Matrix)이란?희소 행렬은 행렬을 구성하는 대다수의 요소가 0으로 채워져 있는 행렬을 말합니다. 다음은 그 대표적인 예시입니다.아래 행렬에는 0이 총 5개 들어 있습니다. 0의 개수가 행렬 전체 요소 수의 절반을 넘기 때문에 이 행렬은 희소 행렬에 해당합니다.5 0 0 3 0 1 0 0 9희소 행렬을 판별하는 C++ 프로그램은 다음과 같습니다.예제 코드#include<iostream> using namespace std; int main () { int a[10][10] = { {0, 0
단일 연결 리스트(Singly Linked List)는 자기 참조 구조체(self-referential structure)를 사용해 만든 노드들이 연결된 형태의 자료구조입니다. 각 노드는 데이터(data)와 다음 노드를 가리키는 참조(next) 두 부분으로 구성됩니다. 연결 리스트 전체에 접근하려면 첫 번째 노드에 대한 참조만 있으면 되는데, 이를 헤드(head)라고 부릅니다. 리스트의 마지막 노드는 다음 노드가 없기 때문에 해당 부분에 NULL을 저장합니다. 다음은 단일 연결 리스트를 구현하는 C++ 프로그램입니다. 예제 코드
순환 단일 연결 리스트란?순환 단일 연결 리스트(Circular Singly Linked List)는 자기 참조 구조체(self-referential structure)를 이용해 생성한 노드들로 구성되는 자료구조입니다. 각 노드는 두 부분으로 나뉘는데, 하나는 실제 데이터를 저장하는 데이터(data) 영역이고, 다른 하나는 다음 노드를 가리키는 포인터(next)입니다.연결 리스트 전체에 접근하려면 첫 번째 노드에 대한 참조만 있으면 되며, 이를 헤드(head)라고 부릅니다. 일반 연결 리스트와 달리 순환 연결 리스트는 마지막 노드가
이중 연결 리스트란 무엇인가?이중 연결 리스트(Doubly Linked List)는 자기 참조 구조체(self-referential structure)를 사용해 생성한 노드들로 구성되는 대표적인 자료구조입니다. 각 노드는 세 가지 요소로 이루어져 있는데, 바로 데이터(data), 다음 노드를 가리키는 포인터(next), 그리고 이전 노드를 가리키는 포인터(prev)입니다.전체 연결 리스트에 접근하려면 첫 번째 노드에 대한 참조만 있으면 충분하며, 이를 헤드(head)라고 합니다. 리스트의 마지막 노드는 더 이상 가리킬 다음 노드가
스택(Stack)은 여러 개의 요소를 담는 추상 자료구조입니다. 스택은 LIFO(Last In First Out, 후입선출) 방식으로 동작하며, 즉 가장 마지막에 삽입(push)된 요소가 가장 먼저 삭제(pop)됩니다.스택의 주요 연산Push – 스택의 맨 위(top)에 새로운 데이터 값을 추가합니다.Pop – 스택 맨 위에 있는 데이터 값을 제거하고 반환합니다.Peek – 스택에서 데이터를 제거하지 않고 맨 위의 값만 확인합니다.아래는 배열을 사용하여 스택을 구현한 C++ 프로그램입니다. 사용자가 메뉴를 선택하여 직접 push,
스택(Stack)이란? 스택은 여러 개의 요소(element)를 모아 놓은 추상 자료구조입니다. 스택은 LIFO(Last In First Out, 후입선출) 방식으로 동작하며, 이는 가장 마지막에 삽입된 요소가 가장 먼저 제거된다는 의미입니다. 스택의 대표적인 연산은 다음과 같습니다. Push – 스택의 맨 위(top)에 데이터 값을 추가합니다. Pop – 스택의 맨 위에 있는 데이터 값을 제거합니다. Peek – 스택의 맨 위 데이터 값을 제거하지 않고 그대로 반환합니다. 아래 프로그램은 연결 리스트(linked list)를
acos() 함수는 라디안(radian) 단위로 표현된 각도의 역코사인(아크코사인) 값을 반환하는 함수로, C++ STL에 기본으로 내장되어 있습니다. 삼각함수 관련 연산을 수행할 때 매우 유용하게 사용됩니다.acos() 함수의 문법acos(var)문법에서 확인할 수 있듯이, acos() 함수는 var라는 하나의 매개변수를 받습니다. 이 매개변수는 float, double, long double 자료형 중 하나여야 하며, 그 값은 반드시 -1부터 1 사이의 범위를 가져야 합니다.함수의 반환값은 var의 역코사인 값으로, -π(파이)
atan2() 함수는 y와 x 좌표에 대한 역탄젠트(arctangent) 값을 반환하는 함수입니다. 여기서 y와 x는 각각 y좌표와 x좌표 값을 의미하며, atan2()는 C++ STL에 내장된 함수로 헤더 파일에 정의되어 있습니다. atan2() 함수의 구문 atan2(dataType var1, dataType var2) 구문에서 확인할 수 있듯이, atan2() 함수는 float, double 또는 long double 데이터 타입의 두 매개변수 var1과 var2를 받습니다. var1은 y 좌표, var2는 x 좌표를 나타냅
큐(Queue)란 무엇인가?큐(Queue)는 여러 개의 요소를 담는 추상 자료구조입니다. 큐는 FIFO(First In First Out, 선입선출) 방식을 따르며, 이는 가장 먼저 삽입된 요소가 가장 먼저 삭제된다는 뜻입니다. 다시 말해, 큐에서는 가장 오래전에 추가된 요소가 우선적으로 제거됩니다.아래는 배열을 사용하여 큐를 구현한 C++ 프로그램입니다.예제 코드#include <iostream>using namespace std;int queue[100], n = 100, front = - 1, rear = - 1;v
큐(Queue)는 여러 개의 요소를 담는 추상 자료구조로, FIFO(First In First Out, 선입선출) 방식으로 동작합니다. 즉, 가장 먼저 삽입된 요소가 가장 먼저 삭제되며, 반대로 말하면 가장 최근에 추가된 요소가 마지막에 제거됩니다.다음은 연결 리스트(Linked List)를 이용해 큐를 구현하는 C++ 프로그램입니다.예제 코드#include <iostream> using namespace std; struct node { int data; struct node *next; }; struct
한 변수 선형 방정식이란?한 변수를 포함하는 모든 선형 방정식은 aX + b = cX + d 형태로 나타낼 수 있습니다. 여기서 a, b, c, d의 값이 주어졌을 때, 미지수 X의 값을 구하는 것이 목표입니다.예를 들어 5X + 3 = 4X + 9라는 방정식이 주어지면, 양변을 정리하여 X = 6이라는 해를 구할 수 있습니다. 이러한 계산 과정을 C++ 프로그램으로 자동화할 수 있습니다.C++ 구현 예제다음은 한 변수 선형 방정식을 풀는 C++ 프로그램입니다.#include<iostream> using namespace