전체 글 219

[강의] 10월 31일 수업정리

오늘은 배열의 동적 할당, 메모리 누수 검출 방법, 메모리 관리하는 방법에 대한 수업을 들었다. 1. 배열의 동적 할당동적 할당을 이용할 때, 포인터는 배열과 단일 객체 모두를 가리킬 수 있다. 그렇기에 참조되는 것이 배열인지 단일 변수인지 구분할 수 없으므로, 동적으로 할당된 배열의 주소와 크기를 세트로 관리하는 것이 중요 포인트이다. 1.1 예제#include int main(){ int* p{}; int nLength{}; scanf_s("%d", &nLength); p = new int[nLength] {}; for (int i = 0; i 동적 할당된 배열을 사용할 때는 항상 배열의 첫 번째 주소값과 크기를 세트로 다뤄야 한다. 그래야 동적 할당된 메모리를 효율적으로 관리할 수 있기 때문이다. ..

C++ 2024.11.01

[강의] 10월 30일 수업정리

오늘은 깊은 복사 / 얕은 복사, C++ 메모리 구조, 동적할당에 대한 수업을 진행하였다. 1. 깊은 복사 / 얕은 복사 깊은 복사와 얕은 복사는 클래스 멤버에 포인터가 존재할 때 사용하는 용어이기에 포인터가 없다면 단순히 복사라고 생각해도 무방하다. 얕은 복사 - 클래스의 외형을 그대로 복사한다.                   포인터의 경우 참조하는 메모리를 복사하지 않아 원본과 복사본이 동일한 메모리를 공유하게 된다.                   즉, 클래스에 눈에 보이는 것만 복사를 한다.깊은 복사 - 클래스가 가진 모든 구조와 메모리를 동일하게 만들어서 복사한다.                    포인터의 경우 참조하는 대상까지 복사하여 독립된 메모리를 가지게 된다.              ..

C++ 2024.10.31

[강의] 10월 29일 수업정리

오늘은 래퍼런스에 추가설명과 복사생성자에 대한 수업을 들었다.  1. 래퍼런스 추가 설명 1.1 const 래퍼런스#include void func(const int& nData);int main(){ int nMain{}; nMain = 99; func(10); // 상수(임시 객체) 전달 가능 func(nMain); // 변수 전달 가능}void func(const int& nData){ printf("%d\n", nData);}const 참조를 사용하면 상수(임시 객체)와 변수 모두를 전달할 수 있다. 이렇게 하면, 값을 복사하는 call by value처럼 사용할 수 있지만 메모리 낭비를 줄일 수 있다. ( 포인터는 call by value를 하기 때문에 메모리..

C++ 2024.10.29

[강의] 10월 25일 수업정리

포인터의 주의사항과 레퍼런스에 대한 수업을 들었다. 1. 클래스 사용 시 포인터 주의 사항 [header.h]#pragma onceclass C_DATA{private: int m_nData;public: C_DATA() = default; void setData(int nData); int* getData();};[header.cpp]#include "data.h"void C_DATA::setData(int nData){ m_nData = nData;}int* C_DATA::getData(){ return &m_nData;}[main.cpp]#include #include "data.h"int main(){ C_DATA cData{}; int* pData{}; cData.setData(100); pDa..

C++ 2024.10.27

[강의] 10월 24일 수업정리

class와 그게 관한 문제를 풀어보았다. 1.기본 생성자와 유니폼 초기화  [ data.h ]  #pragma onceclass C_DATA{private: int m_nData;public: C_DATA() = default; void print();};  [ data.cpp ]#include #include "data.h"void C_DATA::print(){ printf("%d\n", m_nData);} [ test header.cpp ] #include #include "data.h"int main(){ C_DATA c1{}; C_DATA c2; c1.print(); c2.print();} 1.1 차이점 C_DATA c1{};유니폼 초기화 "{}"느 객체의 맴버 변수를 0으로 초기화를 한다..

C++ 2024.10.25

[강의] 10월 23일 수업정리

생성자 추가 내용과 해더 파일을 이용해 클래스 분리하는것에 대한 수업을 진행하였다. 1. class 초기화 #include class C_CIRCLE{private: float m_fPi;public: C_CIRCLE(); float getData();};int main(){ C_CIRCLE c; printf("%f\n", c.getData());}C_CIRCLE::C_CIRCLE() : m_fPi{} { m_fPi = 3.141591f;}float C_CIRCLE::getData(){ return m_fPi;} 1.1. 생성자와 초기화 리스트C_CIRCLE::C_CIRCLE() : m_fPi{}:이 부분은 초기화 리스트를 통해 m_fPi를 기본값 {}로 초기화한다. {}는 0.0f와 같은 역할을 하여 ..

C++ 2024.10.24

[강의] 10월 22일 수업정리

오늘은 Class에 대한 수업을 들었다. 1. Class1.1 정의 C++에서 클래스는 구조체와 마찬가지로 사용자가 정의할 수 있는 일종의 타입이다.클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다.선언된 해당 클래스 타입의 객체를 인스턴스라고 하며, 메모리에 대입된 객체를 의미한다.1.2 인스턴스인스턴스란 OOP에서 클래스의 설계를 기반으로 생성된 구체적인 객체를 뜻한다.객체를 실제로 만든것, 즉 메모리 공간에 구현된 실체이다 -> 객체는 선언, 인스턴스는 실체화를 의미하게 된다.하나의 클래스는 여러개의 인스턴스를 생성할 수 있다. 1.3 기본 구조 class 클래스명 { 접근 지시자; 변수 선언; ... 함수 선언; ... } 클래스 선언의 기본 구조는 위와 같다. 클래스의 ..

C++ 2024.10.23

[예습] 10월 21일 예습

1. 네임 스페이스 1.1 정의네임스페이스는 변수, 함수, 형식 등의 식별자가 서로 충돌하지 않도록 고유한 영역을 정의하는 방법이다.기본적으로 전역 변수와 일반 함수는 전역 네임스페이스에 정의된다.간단히 이야기해서, 네임스페이스는 함수나 구조체, 변수 이름 등의 소속을 정해주는 것이다. 이를 통해 특정 소속에 속한 함수나 변수 등을 구분하여 사용함으로써 코드의 혼란을 줄이고, 동일한 이름의 식별자가 다른 네임스페이스에서 공존할 수 있도록 한다.1.2 기본 구문namespace [네임스페이스 이름]{  함수, 구조체, 변수, 클래스 등}1.3 예제 1: 네임스페이스 선언하기#include namespace Aspace{ void func(int num);}namespace Bspace{ voi..

예습 2024.10.21

[강의] 10월 18일 수업정리

구조체 멤버 맞춤과 구조체의 포인터 사용에 대한 수업을 진행하였다. 1. 구조체 멤버 맞춤 정의 - 구조체의 멤버가 메모리에서 어떻게 정렬되는지를 제어하여, 모듈의 모든 구조에 대해 일관된 메모리 배치를 설정하는 방법이다. 1.1  왜 사용할까? 구조체 멤버 맞춤의 주된 이유는 접근 속도이다.메모리 블록을 기준으로 멤버를 정렬하여 배열처럼 직접 접근할 수 있게 되어 속도가 향상된다.즉, 특정 기준에 따라 메모리 블록을 정렬함으로써 접근을 빠르게 하기 위함이 목적이다. 1.2 구조체 멤버 맞춤 기준C언어 기준 구조체 안에 들어있는 자료형 중 가장 큰 자료형을 기준으로 메모리 블록을 잡게 된다.  1.3 구조체 멤버 맞춤 예시 #include struct S_DATA1{ int n1; char c..

C++ 2024.10.20

[강의] 10월 17일 수업정리

오늘은 구조체에 대한 수업을 들었다. 구조체 (struct)정의구조체(struct)는 사용자가 C++의 기본타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이다. 구조체는 기본타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다. 배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것이다. 1.1 구조체를 사용하는 방법자료형 정의 : 기본 자료형을 조합하여 새로운 자료형을 만들 수 있다. (여러 타입을 묶어 새루운 자료형을 만드는 개념)명명 규칙 : 변수와 구조체를 구별하기 위해 구조체 이름은 주로 대문자로 작성한다.세미콜론 필수 : 구조체 선언 후, 중괄호( {} ) 끝에는 반드시 세미콜론( ; ) 을 붙여햐 합니다. 그렇지 않으면 다름 ..

C++ 2024.10.18