C++ 31

C++[Dangling Pointer, Double Free, 스마트 포인터]

Dangling Pointer메모리에서 더 이상 유효하지 않은 주소를 가리키고 있는 포인터를 의미한다.포인터는 주소를 참조하는데 그 주소에 있는 메모리가 해제됐을 때 실행을 하면 프로그램에 심각한 문제를 일으킬 수 있다.주요 발생 원인함수가 종료된 후, 그 함수의 지역 변수를 가리키는 포인터가 남아 있을 때.동적 메모리 해제 후 그 메모리 주소를 가리키는 포인터가 남아 있을 때.객체가 소멸한 후, 그 객체의 주소를 가리키는 포인터가 남아 있을 때.나올 수 있는 문제점Dangling Pointer를 통해 접근할 경우, 프로그램이 예기치 않게 동작할 수 있다.잘못된 메모리 접근으로 인해 다른 변수나 데이터가 손상될 수 있다.접근 권한이 없는 메모리를 참조하면 프로그램 충돌이 일어날 수 있다.Double Fr..

C++/개념정리 2024.12.30

C++[스택 메모리, 힙 메모리]

스택 메모리(Stack Memory)스택 메모리는 함수 호출 시 자동으로 할당되는 메모리 영역이다. 함수가 호출될 때 지역변수와 매개변수가 스택에 저장됨.스택 메모리의 특징함수가 종료되면 해당 함수에서 사용한 메모리가 자동으로 해제되어 메모리 관리가 편하다.빠른 메모리 할당과 해제가 가능하다.스택은 크기가 작아 너무 많은 메모리를 저장할 수 없다.컴파일 타임에 메모리가 크기가 결정되기 때문에 타입에 대한 안정성이 보장된다.{int x = 0; // 스택메모리에 할당}//함수 종료선언과 함께 메모리 해제힙 메모리힙 메모리는 프로그래머가 명시적으로 메모리를 할당하고 해제하는 영역이다. 동적 메모리 할당을 통해 사용됨.힙 메모리 특징필요한 만큼 메모리를 할당할 수 있어, 스택보다 더 큰 메모리를 사용할 수 있..

C++/개념정리 2024.12.30

C++[클래스를 이용해 동물소리 출력]

Animal이라는 기본 클래스를 정의 합니다.Animal 클래스에는 makeSound()라는 순수 가상 함수를 포함합니다.Animal 클래스를 상속받아 다양한 동물 클래스를 생성합니다.예) Dog, Cat, Cow각 동물 클래스에서 makeSound()함수를 재정의하여 해당 동물의 소리를 출력하면 됩니다!메인 함수에서 Animal 타입의 포인터 배열을 선언하고 Dog, Cat, Cow를 각각 배열의 원소로 선언합니다. → 이후 Animal 배열을 반복문으로 순회하면서 각 동물의 울음소리를 내게 합니다!일단 상상으로 만들어보자면1. Animal이라는 안에 makeSound() = 0;라는 순수 가상 함수가 들어있는 부모클래스를 만든다.2. makeSound를 재정립한 자식 클래스를 만든다. 재정립한 mak..

C++ 2024.12.26

C++[상속, 다형성]

1. 상속상속은 기존 클래스의 속성(데이터)과 메서드(동작)를 새로운 클래스가 물려받는 것을 의미한다. 이런 관계때문에 일반적으로 기존클래스는 부모클래스, 물려받는클래스는 자식클래스라고 부른다.이 기능은 코드의 재사용성을 높이고, 계층적인 관계를 만들 수 있다.예시 택시와 지하철에 관련된 프로그램을 만들고 싶을 때 무게, 탑승가능 인원 수 등은 공통으로 필요하다.그렇다면 이라는 대중교통이라는 부모클래스를만들어서 무게, 탑승가능 인원 수 등의 변수를 정립해주고택시에만 필요한 미터기 등등은 택시라는 자식클래스에서 설정해주는 것이다.이렇게 하면 대중교통에 속하는 탈것들을 만들때마다 공통된 변수를 선언하지 않아도 돼서 중복코드를 확실히 줄일 수 있다.2. 다형성다형성은 동일한 인터페이스를 통해 서로 다른 데이터..

C++/개념정리 2024.12.26

C++[헤더파일, 파일관리]

헤더파일이란?.h 또는 .hpp 확장자를 가진 파일로, 클래스, 함수, 상수 등의 여러 선언을 포함한다.지금은 간단한 파일들만 사용을 하지만 나중이 되면 많은것들을 사용하게 될텐데 이 때 유지보수및 재사용을 쉽게하기 위해서는 매 소스파일에서 정의를 할 수 없으니 헤더파일이라는 친구를 통해 선언을 하고 여러 소스코드에서 가져다 쓸 수 있게 할 것 이다. 헤더파일 사용방법!headerex.h라는 파일을 만들어준다.헤더가드얘네들은 헤더가드라고 하는데 나도 모르게 비슷한 애들을 사용할 때 같은 이름을 사용하면 소스파일에서 어떤 헤더파일을 가져와야할지 헷갈려서 버그가 생길 수 있는데 그걸 방지해주는 역할이라고 보면 된다.#ifndef (If Not Defined)이 지시어는 뒤에 오는 매크로와 같은 이름이 정의되..

C++/개념정리 2024.12.26

C++ [클래스, getter와 setter]

1. 클래스클래스란 데이터와 관련된 함수들을 묶어서 관리할 수 있게 해주고, 망가져버리면 안되는 중요한 데이터를 보호해줄 수 있는 장치입니다. 클래스의 구성요소데이터클래스가 가진 데이터이다, 예를 들어  [캐릭터]라는 클래스를 만든다고 치면 등동작클래스가 수행할 수 있는 동작. 예를 들어, [캐릭터] 클래스에서 공격, 걷기 같은 행동이 동작이 된다.기본적인 구조는 이렇게 된다.이해하기 좀 더 쉽게 간단한 예제를 만들어보겠다.이렇게 만들어보았다. 도중에 public이라는 녀석이 나오는데 이건 데이터의 접근성 여부를 나타낸다.public : 공개 데이터, 클래스 외부에서 데이터와 함수에 접근 가능priavte : 비공개 데이터, 클래스 외부에서는 데이터와 함수에 접근 불가protected : 부모자식관계에..

C++/개념정리 2024.12.25

C++ [오름차순과 내림차순 정렬]

이전에 만들었던 숫자입력에서 오름차순과 내림차순 정렬에 대해 공부해보려고 한다.일단 오름차순 내림차순은 정렬중에 제일 쉬운 알고리즘을 갖고있을거 같은데 나의 짧은 수학지식으로 생각을 해보도록 하겠다.내림차순을 먼저 보겠다. 아마 내림차순은 부등호만 반대로하면 되지않을까 싶다.number[x]는 number[y]와 비교해서 더 큰지 체크한다.크다면 두개를 교환하고 다시 처음부터 재생.크지 않다면 y에 1을 더해준다. y가 범위를 벗어나면 2번으로number[x]보다 큰 수가 없다면 x에 1을 더해준다 그 후 1번을 재생반복해주다 x가 범위를 벗어나면 종료이게 내가 생각해낸 간단한 알고리즘이다. 반복해주고 범위설정을 하는방법은 알고있으니 넘어가고 내가 습득해야 할 지식은 조건문, 그리고 두개를 교환하는 방법..

C++ 2024.12.24

C++[숫자 5개를 받아 합계를 내고 평균 구하기]

사용자로부터 5개의 숫자를 입력 받아 배열에 저장하고 이들의 합계와 평균을 계산해서 출력.5개의 숫자를 입력 받는 공간은 배열을 활용.합과 평균을 구하는 동작은 main함수에 한번에 작성하지 말고 각각 함수를 구현.이걸 만들기 위해 일단 사고로 흐름을 만들어보려고 한다.숫자를 받아서 저장하는 함수 Adouble변수로 cin을 받아서 배열로 저장하기숫자의 합계 계산 함수 B저장한 수의 배열을 이용해 다 더해주기숫자의 평균 계산 함수 C숫자의 합계를 배열 원소 개수로 나누기메인 { 숫자 5개 입력해주세요 출력A함수 활성화 B함수 활성화 C함수 활성화합계 계산 출력평균 계산 출력}이렇게 만들면 될거같다.그럼 한번 만들어보도록 하자1. 숫자를 받아서 저장하는 함수일단 함수로 void(반환x) 하는 inputnu..

C++ 2024.12.24

C++ 기본[변수, 변수선언, 간단한 연산, 변수 값 입력]

이번에는 변수를 이용해서 간단하게 연산들을 해볼생각입니다.1. 변수타입데이터 종류설명int정수양수, 정수, 음수를 다 포함하지만 소수점은 표현하지못한다.float, double부동 소수소수점을 표현하며 두개는 표현가능한 소수자리점 차이 (double > float)char단일 문자작은 따음표로 한 문자 표현(예 : 'F')bool논리값true와 false 두개만 가짐string문자열쌍 따음표로 문자열 표현, 헤더 필요unsigned양수음수 입력 불가, 양수로의 범위가 int의 2배+1 (총 양은 같음)변수는 이렇게 있습니다.변수선언은 이렇게 각 타입에 따라 데이터 종류별로 선언 할 수 있겠죠? 2.간단한 연산2-1 산술연산우선 변수선언을 a = 10, b= 4로 하겠습니다.기호설명+덧셈-뺄셈*곱셈/나눗셈..

C++/개념정리 2024.12.23