본문 바로가기

Study

[두들낙서] 객체 복사 얕은 복사 - 주소값만 복사한다 주의 주소값만 복사하면 에러를 일으킬 수 있다 ex) int *a = new int(5); int *b = new int(3); a = b; delete a; 3을 삭제한다 delete b; 삭제된 부분을 삭제하기 때문에 에러가 난다 깊은 복사 - 값을 복사한다 - 얕은 복사로 인한 오류를 방지하기 위해 깊은 복사를 쓰는 것이 좋다 ex) int *a = new int(5); int *b = new int(3); *a = *b; delete a; 5가 있던 위치에 있는 3을 삭제한다 delete b; 기존 3을 삭제한다 복사 생성자 - 객체를 생성할 때 다른 객체를 복사한다 - 객체를 복사할 때, 멤버 포인터에서 얕은 복사가 일어나기 때문에 오버로딩해준다 ex) Strin.. 더보기
[두들낙서] 동적 할당 동적 할당 - 프로그램 실행 중에 변수를 메모리에 할당하는 것 - new와 delete를 이용해서 생성, 해제한다 new - 임의의 메모리 위치를 지정해 값을 넣고 주소값을 반환한다 ex) int *a = new int(5); int *arr = new int[100]; delete - 메모리 할당을 해제한다 ex) delete a; delete[] arr; 더보기
[두들낙서] 클래스와 객체 클래스 - 특정한 용도를 수행하기 위한 변수와 함수를 모아 둔 틀이다 자료형으로 볼 수 있다 - struct는 public 선언이, class는 private 선언이 기본이다 private - 클래스 내에서 private로 선언된 개체는 외부에서 접근이 불가능하다 클래스에서 선언되는 함수로만 접근 가능하다 ex) class TV { private: bool powerOn; int channel; int volume; } public - 클래스 내에서 public으로 선언된 개체는 외부에서 접근이 가능하다 private로 선언된 개체와 구분을 위해 사용한다 - private와 사용방법은 같다 객채 - 클래스라는 틀을 이용하여 찍어낸 개체(변수, 메모리상의 공간)이다 - 변수를 선언해 주듯이, 선언을 해주면.. 더보기
[두들낙서] C++ 스타일 문법 namespace - 사람의 성과 같이, 네임스페이스는 하위 변수, 함수들을 구분할수 있도록 해준다 - 사용 표현은 '(namespace)::(변수 또는 함수)'다 - 중첩 가능하다 - 네임스페이스 안에 있는 함수에 사용되는 변수는, 명시하지 않아도 네임스페이스의 변수를 사용한다 - 네임스페이스 선언과 정의를 떼어서 쓸 수 있다 처음 선언을 해주면 언제든지 정의를 별도로 해줄 수 있다 - using namespace를 사용하면, 명시하지 않아도 해당 네임스페이스로 인식한다 주의 네임스페이스 안에 있는 함수에 사용되는 변수가 다른 네임스페이스를 명시한다면, 명시된 변수를 사용한다 ex) namespace doodle { int n; void set() { n = 20; } } C언어와 다른점 1. 변수 선.. 더보기
[두들낙서] 상수 상수 - 변하지 않는 수 - 주로 대문자로 선언한다 const - 메모리에 저장되는 변수를 변경할 수 없도록 한다 ex) const float PI = 3.141592; macro - 메모리에 별도로 저장되지 않는 상수를 정의한다 - 코드를 정의할 수 있다 주의 상수명에 띄어쓰기는 불가능하다 주의 연산을 정의할 때 안전을 위해 매개변수 별로 괄호를 쳐줘야 안전하다 X*X에 A-1을 대입하면 A-1*A-1로 -1이 된다 ex) #define PI 3.141592 #define PRINT_HELLO printf("Hello"); enum - 원소들에 자동으로 번호를 붙여준다 - 상태를 사용하는 코드를 짤때 유용하다 주의 중간에 임의로 숫자를 붙여주면, 그 숫자부터 이어진다 0 1 5 6 ... ex) enu.. 더보기
[두들낙서] 구조체 typedef - 기존 자료형에 별명을 붙인다 - typedef 자료형 이름 순으로 선언한다 주의 배열에 사용하면 선언부에만 대괄호를 쓰고, 사용할 때는 대괄호를 쓰지 않는다 주의 포인터를 만들때 선언부에만 *를 쓰고, 사용할 때는 *를 쓰지 않는다 ex) typedef int Int32; typedef int Pair[2]; Pair point = {3, 4}; int point[2] = {3, 4};로 인식한다 구조체 - 중괄호 내부의 요소들을 갖춘 자료형이다 - 중괄호로 초기값을 설정해 줄 수 있다 - 주로 전역변수로 선언해준다 - 구조체의 메모리 크기는 중괄호 안 자료형들의 메모리 크기의 합과 같다 주의 포인터를 사용할 때 괄호에 유의해야 한다 예제에서 확인 주의 구조체도 자료형이기 때문에 cal.. 더보기
[두들낙서] 함수 함수 - 함수를 호출하면 중괄호 내의 코드들을 실행시키고, 호출 전으로 돌아간다 - 자료형과 함께 함수명을 붙이고 중괄호안에 코드들을 적는다 - printf와 scanf 등도 하나의 함수다 return - 함수에서 호출시에 자료형에 맞는 지정된 변수나 연산값을 반환한다 함수 자료형이 int라면 int값만 반환할 수 있다 - 값을 반환하면 실행중이었던 함수는 종료된다 반복문이라도 함수 내에서 발생했다면 종료된다 - return을 쓰지 않아도 함수는 종료될 수 있다 다만, 반환되는 값은 없다 주의 return 다음의 코드들은 실행되지 않는다 주의 함수의 자료형이 void라면 return할 수 없다 전역변수 - 함수 밖에서 선언된 변수로 모든 함수에서 접근이 가능하다 지역변수 - 하나의 함수안에서 선언된 변수.. 더보기
[두들낙서] 포인터 포인터 - 변수의 주소를 저장하는 변수다 - 포인터는 가리킬 변수의 형, '*', 포인터 이름 순으로 선언한다 - 포인터 앞에 '*'를 입력하면 포인터가 가리키는 변수의 값을 나타낸다 *ptr_a == a - 포인터에 1을 더하면 포인터 주소에 지정된 형의 크기만큼 더해진다 int의 포인터면 4가 더해진다 - 배열에서 포인터에 1을 더하면 다음 원소를 가리킨다 &a[0] + 1 = &a[1] 주의 변수의 주소는 상황마다 달라질 수 있으므로 절대적인 값을 가지지 않는다 ex) int a = 20; int *ptr_a; ptr_a = &a; 위의 2줄을 int *ptr_a = &a로 구현 가능하다 *ptr_a = 10; a의 값이 10이 된다 배열과 포인터 관계 정리 - ptr == &ptr[0] - *pt.. 더보기