본문 바로가기
C++/수업 내용

[ C++ 2일차 ] class, 동적 메모리, C++의 고유 문법, 지평좌표계..

by 왹져박사 2024. 12. 26.

 

**개념의 자세한 내용이 아닌 기존 독학 내용을 제외한 강의에서 새롭게 알게 된 내용들을 정리하였다.

 

 

C++에 대한 정확한 자료들은 다음 두 페이지를 참고하자. 

https://learn.microsoft.com/ko-kr/cpp/cpp/?view=msvc-170

 

C++ 문서 - 시작, 자습서, 참조.

Microsoft C++ 및 Visual Studio 사용자를 위한 C++ 프로그래밍 참조.

learn.microsoft.com

https://en.cppreference.com/w/

 

cppreference.com

Null-terminated strings:    byte  −   multibyte  −   wide

en.cppreference.com

 

특히 구글링 시, msdn (+검색 내용)을 하면 더 정확하다고 하셨다. msdn_위의 microsoft 공식 문서

 

 

class의 활용

class는 헤더파일(.h)/소스파일(.cpp)을 사용하여 분리하고 include로 불러오는 방식을 사용하자. 

 

동적 메모리 해제 유의점

프로그램 중간에 동적 메모리 해제 시 null 값 넣어주기. nullptr. 

 

C++의 문법 특성

C++은 C#과 다르게 변수를 아래, 함수를 위에 선언한다. 

C++에만 있는 class의 변수 초기화 고유 문법은 다음과 같다. 

class Test
{
public:
	Test()
		: x(0), y(0)	//변수 초기화
	{
    
        }
    
private:
	int x;
	int y;
}

 

 

 

지평좌표계

위치값과 벡터값이 존재할 때, 이동하는 방법. 

2D를 기준으로 0, 1의 층을 나누어 3D 공간에서 계산한다.

위치값 (x, y, 1) ,벡터값_방향 (x, y, 0)으로 존재하여 이를 더한 값이 이동 후 위치값이 된다.

이동 위치 (x+x, y+y, 1+0). 

(x, y, 2)는 될 수 없기에 위치+위치는 불가하다. 

마찬가지로 3D는 4차원 공간으로 계산한다. (x, y, z, w)

 

 

 

class의 friend 접근 제한자

friend 선언을 해 주면, 접근 제한을 무시하고 private 접근이 가능하다. 

편리하지만, 객체 지향 프로그래밍의 원리에 위배하며 남용의 가능성 때문에 Java와 C#에서는 없어졌다. 

사용하지는 않지만, Unreal Engine 내부 코드에 종종 보여 해석할 수 있어야 한다. 

 

 

 

[중요] 전방선언_class/struct를 다른 class에서 접근하기

포인터나 레퍼런스를 사용하면 class에서 class에 접근 가능하다. 

class는 크기를 알 수 없는 타입이기 때문에,

크기를 계산하지 않아도 주소 전달만 하면 되는 포인터와 레퍼런스로 접근이 가능하다!

전방선언 하면 할수록 컴파일 속도가 개선된다. 

class 내부 혹은 class 선언 전에 전방선언이 가능하다. 

 

include 대신 사용할 수 있다. (활용이 많다면 include)

 

 

 

복사 생성자

다음과 같은 형태. ClassName(const ClassName& other)

기본 생성자(다른 생성자가 선언되지 않았을 경우)와 복사 생성자가 선언되지 않았다면 기본 생성자로 만들어진다. 

기본 생성자를 명시적 제거해야 할 경우 ClassName() = delete;로 생성을 사전 방지한다. 

*복사 생성자 호출 시점 공부해 보기

 

 

오늘의 강사님 말씀!

추정하지 말고 측정하라. 

꼼꼼함이 한 끗 차이의 핵심.

 

+ 수업 중 이슈

2024.12.26 - [C++/수업 내용] - [ C++/문제 해결 ] class의 깊은 복사와 임시 객체를 통한 생성 오류

 

[ C++/문제 해결 ] class의 깊은 복사와 임시 객체를 통한 생성 오류

수업 중 이슈 확인깊은 복사에서 다음 코드 내용과 같이 Player player2 = Player(player1);으로 임시 객체를 만들어 생성 시,  Player player1 = Player("Alien", 0, 0); Player player2 = Player(player1);다음과 같은 에러가

narmhye.tistory.com