C++ 36

nullptrObject

class Test { public: int Number; public: void Plus(int Left, int Right) { int Value = Left + Right; retrun Value; } } int main() { Test* Ptr = nullptr; Ptr->Number = 100; // 터진다 Ptr->Plus(100, 200); // 이건 가능하다 int* Ptr = 0; // nullptr 익셉션이라고 한다 (*Ptr) = 100; //누구도 가리키지 않는 참조를 사용하지 마라 } 왜 Ptr->Number = 100은 에러가 나고 Ptr->Plust(100, 200)은 실행이 되는지 생각해보자. 우선 Test* Ptr = nullptr 에서 객체의 주소값을 nullptr로 해줬..

C++ 2020.12.13

함수 호출 규약

복습) #define : 매크로 기능으로 치환해주는 기능을 한다 class Test { private: //명시적 표현 int a; int b; int c; public: Test() //생성자 { } void Func() { this->a = 400; } }; void GlobalFunc() //__cdecl 호출 규약이 생략되 있다 { int a = 0; } int main() { GlobalFunc(); } this를 사용하는 함수 즉 멤버 함수들은 void __thiscall Func() 에서 __thiscall 이 생략되있다. 이거를 함수 호출 규약이라고 한다. C++에서는 가장 유명한 함수호출규약이 3가지 있다. __thiscall : 클래스 내부에서 this를 사용하는 함수들이 사용 __st..

C++ 2020.12.13

ObjectInit,Constructor(생성자)

프로그래머라면 반드시 초기화를 해줘야 한다 !(초기값을 넣어준다) 초기화: 자료형이 선언됨과 동시에 값을 입력해주는 것 class Test { public: int a = 0; int b = 0; int c = 0; }; 위의 방법은 클래스 선언의 변수에서부터 초기화를 해주는 방법으로 리터럴 초기화라고 한다. c++ 14부터 지원하는 문법이다. int main() { Test NewTest = {10, 10, 10}; } 위의 방법은 이니셜라이즈 리스트 초기화라고 한다. 단점은 멤버변수가 public이여야만 가능하다. private이 내부에 하나만 존재해도 사용 불가 ! Test NewTest = Test(); 위 방법은 디폴트 생성자 초기화라고 한다. 어떤값이 들어가 있는지 모를수도 있기 때문에 명시적..

C++ 2020.12.13

접근제한자

class Player // 사용자 정의 자료형 생성 { public: //여기에는 public이 생략되있고 이를 디폴트 접근제한 지정자라고 한다. int Att; int Hp; }; int main() { Player NewPlayer; NewPlayer.Att = 100; // 여기서 이게 되는건 멤버 변수인 int Att가 public으로 되어있기 때문이다 } 접근제한자에는 3가지 종류가 있다. 접근제한자 멤버(사용자 정의 자료형 내부) 자식 전역 지역 public 가능 가능 가능 가능 private 가능 불가능 불가능 불가능 protected 가능 가능 불가능 불가능 struct StructPlayer { private: //아래있는 변수나 함수들을 private 접근 제한 방식으로 처리 int ..

C++ 2020.12.13

This

struct Player { int Att; int Hp; void Attack(const Player& _Att,const Player& _Def) { _Def.Hp -= _Att.Att; //에러 } }; 위의 코드에서 _Def.Hp -= _Att.Att; 의 코드는 에러가 난다. Attack의 두번째 인자에 const를 붙였고 _Def의 들어온 사용자 정의 자료형 내부의 멤버변수인 Hp의 값을 변경하려고 해서이다.여기에서 알수 있듯이 사용자 정의 자료형에 const를 붙이면 내부의 멤버변수 모두에 const가 붙는것이다. struct Test { int Number; void Func() { ++Number; } }; int main() { Test NewTest = {0}; // 만드는 순간 메모..

C++ 2020.12.12

객체지향

프로그래밍에서 인터페이스 : 우리에게 제공하는 사용자 정의 자료형과 함수등등을 모두 통칭해서 말할때가 많다. (다른 프로그래머가 내 코드에서 사용할 수 있는 코드적인 걸 제공하면 그 모든게 인터페이스) ​ 구조체 사용자 정의 자료형 하나 이상의 변수를 묶어서 자기가 원하는 새로운 자료형을 정의할때 사용한다 -> 개념을 표현하고 싶을때 ​ 복습) struct Player { int Hp; int Att; int Def; } Player PvP(Player _Player1,Player _Player2) { _Player1.Hp -= _Player2.Att - _Player1.Def; _Player2.Hp -= _Player1.Att - _Player2.Def; return _Player1; } ​함수의 인자..

C++ 2020.12.10