본문 바로가기

Programing/C++

(27)
[C++] Null Ptr (널포인터) 기본 다지기 오늘은 C++11 에서 부터 추가된 Null Ptr(널 포인터) 에 대해 살펴 보겠다. nullptr 먼저 아래의 코드를 보자 위의 2줄은 ok이지만, 마지막 2줄에서는 error가 발생 한다. 왜 일까? #include int main(int argc, const char * argv[]) { // insert code here... int n1 = 0; // 1. ok int* p1 = 0; // 2. ok int* p2 = 10; // 3. error int* p3 = n1; // 4. error } 먼저 int n1 = 0; 구문에서 이 '0'에 대해서 생각 해보자. 이 '0'은 바로 정수(int)형 literal 이다. 즉 포인터 변수 초기화에 사용이 될 수 있다. (포인터로 암시적 형 변환) ..
[C++] Const, Return, Rvalue - Reference 전 포스팅에 이어서 Reference의 활용으로 Const, Return, Rvalue에 대해서 알아보자. Const Reference 아래와 같은 예시가 있다고 생각해보자, #include struct Rect { int left; int top; int right; int bottom; }; void foo(Rect r) { } int main(int argc, const char * argv[]) { // insert code here... Rect rc = {1,1,5,5}; foo(rc); } 여기서 foo 함수에 Rect 타입 변수 rc를 전달하는데 "foo 함수 안에서는 rc의 상태는 변경되면 안된다." 라는 규칙이 적용이 되면 우리는 Call by value로 전달하면 된다. Call by..
[C++] Reference 오늘은 표준 입출력에 이어서 Reference에 대해 공부해보자. 레퍼런스 (Reference, 참조) 란? 이미 존재하는 변수(메모리)에 대한 추가적인 별칭(alias)를 부여 하는 문법 예시는 다음과 같다. #include int main(int argc, const char * argv[]) { // insert code here... int n = 10; int*p = &n; int&r = n; r = 20; std::cout
[C++] 표준 입출력 C 언어와 C++ 언어의 표준 입출력의 차이점에 대해서 알아보자 먼저 아래 구문을 통해 C언어 스타일의 입출력 표기 하는 방법과 C++ 언어의 입출력 표기하는 방법을 비교해보려고 한다 먼저 각 언어 스타일마다 표기법을 살펴보자 [C언어 Style] #include int main(int argc, const char * argv[]) { int n = 10; double d = 3.4; printf("%d, %f\n", n, d); scanf("%d", &n); } [C++ 언어 Style] #include int main(int argc, const char * argv[]) { // insert code here... int n = 10; double d = 3.4; std::cout
[C++] Pointer(포인터)[상] 이번 포스팅에서는 포인터에 대해 알아보자 ! 정의 - 변수를 가리키는 변수 - 메모리 주소를 가리키는 변수 - 메모리 주소를 저장하고 있는 변수 이다. 일반적으로 * 키워드를 사용하고 있는 변수라고 보면 된다. 아래와 같이 pointer변수의 value값과 num변수의 주소 값이 같은 것을 볼 수 있다 예제(포인터) 위의 내용을 코드로 나타내면 다음과 같다. ※여기서 &연산자는 단향일 경우는 주소를 나타내는 연산자이다. 다항일 거유는 비교구문으로 and표시로 사용 int num = 10; int* pointer = # 그럼 이 결과가 어떻게 되는지 한번 살펴보자. #include using namespace std; int main() { int num = 10; int* pointer = &nu..
[C++][Study] 내가 만드는 문자열 클래스(연산자오버로딩, 복사생성자) 우리가 만든 MyString 문자열 클래스에 == 연산자 오버로딩하여 문자열 비교 기능을 추가해보자 연산자 오버로딩이란? +, -, ==, [ ]와 같은 기본적으로 정의되어 있는 연산자 들을 우리의 입맛에 맞게 변형해서 사용할 수 있는것을 의미 operator 연산자 기본 구조는 다음과 같다. "(리턴타입) operator (연산자)(연산자가 받는인자)" 변수 정의 1) char* string_content : 문자열 데이터를 가르키는 포인터 2) int string_length : 문자열 길이 3) int memory_capacity : 현재 할당된 용량 char* string_content; int string_length; int memory_capacity; 생성자 소멸자 정의 1) 'a', 'b..
[C++][Study] 내가 만드는 String 문자열 string 클래스를 직접 만들어, 우리가 string a = "a" 이렇게 쉽게 작성했던 것들이 어떻게 동작하는지 이해를 해보고자 한다. 먼저 정의 부분은 다음과 같다. #include class string { char *str; int len; public: string(char c, int n); // 문자c 가n 개있는문자열로정의 string(const char *s); string(const string &s); //~string(); void add_string(const string &s); // str뒤에 s를 붙인다. void copy_string(const string &s); // s를 복사한 값을 str에 대입한다. int strlen(); // 문자열 길이 리턴 }; 변수는 *s..
Xcode & SFML 셋팅하기 https://youtu.be/WOyp5n2FmZY 초기 셋팅은 위에 내용 참고하고 이거 진행 후에 에러가 있었던 부분에 대해서 추가 셋팅 해야하는 방법에 대해 적는다 우측에 Project Document의 project format을 xcode 12.0-compatible로 변경한다 (최신 버전) Build Phase 부분에서 Runscript부분에 For install builds only에 check를 해준다 마지막으로 권한 허용을 해줘야함 이렇게 모든곳 이라는 항목이 없으면 터미널을 이용하여 권한 설정 을 해야함 모든 곳 활성화 : sudo spctl --master-disable 모든 곳 비활성화 : suto spctl --master-enable 모든곳 활성화/비활성화 상태 확인 sudo sp..