C++ 14

C++ class

객체란 class 타입의 변수라고 생각하면 된다. 객체를 만들어내는 class 에는 멤버 변수와 멤버 함수를 정의할 수 있다. 멤버 변수는 객체의 속성이라고 생각 할 수 있고, 멤버 함수는 객체의 동작을 정의 한다. 그리고 해당 클래스로 만들어낸 객체에서 멤버를 불러올 때에는 도트(.)연산자를 사용한다. 그리고 객체 또한 객체 포인터를 만들어 낼 수 있는데, 이 객체 포인터에서 멤버를 불러 올 때에는 -> 를 사용한다. 객체 안에 생성자가 없을 때에는 / 클래스, 클래스 이름 이렇게만 선언 해야 한다. 요약하자면 생성자가 없고 디폴트 생성자만 있을 때에는 () 소괄호를 붙이지 않는다. 또한 디폴트 생성자를 호출 할 때에는 () 를 붙이지 않는다. 만약 ()를 붙이게 되면 함수의 원형을 선언하는 것과 같다..

C++ 2022.06.12

c++ 객체

C++ 도 객체 배열을 생성해 낼 수 있다. 그리고 동적으로도 생성이 가능하다. 또한 각각에 접근하여 호출 또한 가능하다. 객체의 포인터(객체의 주소)를 통해서 맴버에 접근하기 위해서는 -> 를 사용해야 한다. 객체 배열의 각각의 아이템은 객체의 포인터가 아니라 각각이 객체이다. 따라서 cararray[] 의 배열의 아이템이 car 객체로 되어 있다면 cararray[0]. 으로 객체의 state 를 호출 해야 한다. this this 는 현재 코드를 실행 시킬때의 객체를 가르키는 포인터 이다. 따라서 비멤버 함수에서는 this 를 사용할 수 없다. 코드를 실행시키는 멤버(현재 객체) 가 없기 때문이다.

C++ 2022.05.18

복사 생성자, 복사

복사 생성자란, 자신과 같은 타입의 객체를 매개변수로 받는 생성자이다. 복사생성자가 없으면 자동으로 모든 멤버변수의 값을 복사하는 디폴트 복사생성자가 생성된다. 복사생성자의 선언은 객체를 인자로 받아서 값을 뽑아내서 객체를 만들어준다. 깊은복사와 얕은복사 얕은 복사는 값만을 복사하는 것이다 따라서 주소를 공유하며, 변수명만 두가지 인것이 되므로 값을 고치게 되다면 두개의 변수안의 값이 다 바뀌게 된다. 따라서 서로 다른 주소로 값만등 가져오기 위해서는 깊은 복사를 해주어야한다. 문자열의 깊은 복사를 할떄에는 strncpy 를 활용한다. // 문자열을 받을 때에는 변환이 되며 안되므로 const로 설정 해주어야 한다. const char * 이런 식으로 정의 해주어야 한다. 요약하자면 const 선언이 ..

C++ 2022.05.17

C++ class

객체란 object 로 상태와 동작을 가지고 있다. 객체의 상태 state는 변수로 설정하고, 동작은 함수로 제작한다. 객체의 사용은 객체를 이용하여 멤버에 접근할 수 있다. 도트 연산자를 통하여 변수에 접근한다, 객체의 포인터에서 접근할 때에는 -> 를 사용하여 접근한다. 클래스 안에서 변수를 설정하는것을 멤버변수라고 한다. 접근제어자에는 private, public 이 있다. 지정자를 아무것도 지정하지 않으면 자동으로 private로 설정한다. 접근자와 설정자가 있는데 접근자는 멤버변수의 값을 반환해주는 역할이고 설정자는 멤버변수의 값을 설정해주는 역할이다. 이들을 선언함으로서 잘못된 값이 넘어오는 것을 방지 할수 있다. 이와 비슷하게 구조체가 있는데, 구조체는 변수만 설정할 수 있고, 모든 변수가 ..

C++ 2022.05.16

C++

parameter passing massage call by value : 메모리에 새로 할당하여 그곳에 값을 복사해서 넣어준다. call by reference : 주소 값 자체를 보내준다. 따라서 call by value 는 함수안에서 값만 활용하고 싶을 때에 사용하고 call by reference 는 그 값을 받아와서 수정까지 하고 싶을 때에 사용합니다. call by value 로 나타낸 함수 이다. swap 함수안에서 수정이 되고, swap 함수가 끝나면 새로 할당 된 값들이 사라지기에 최종 적으로 수정이 되지는 않는다. call by reference 를 이용한 함수이다. 위와 같이 가져오게 된다면 swap 함수에서 가리키는 곳이 main에 있는 a 와 같기에 수정한 값이 swap 함수가 끝..

C++ 2022.04.12

C++ 포인터

포인터 변수란 메모리의 주소값을 가지고 있는 변수이다. 메모리의 단위는 바이트다. 1바이트는 8비트이다. 변수의 자료형의 크기에 따라서 할당되는 양이 다르다. 변수의 주소를 가져오는 연산자는 &이고, 주소안의 값을 참조하는 연산자는 *이다. 포인터의 선언은 자료형에 *을 붙여서 포인터 자료형임을 나타낸다. 예를 들어 char*, int*, double* 처럼 자료형을 나타낸다. 하지만 위의 모든 포인터 자료형들의 크기는 8byte이다. 그 이유는 모두 주소값을 나타내는 자료형이므로 주소를 담기 위해서는 8byte가 필요하기 때문이다. 하지만 운영체제 별로 64bit 운영체제이면 64bit 만큼의 주소가 표현이 가능하므로 8byte, 32bit os 이면 32bit 만큼 표현이 가능하므로 포인터의 크기가 ..

C++ 2022.04.07

c++ 변수의 scope

scope: 함수 상에서 보이는 변수가 선언되고 사용 될 수 있는 공간 이다. 범위의 종류에는 지역변수와 전역변수가 있다. 지역변수의 스코프는 {}, 하나의 블럭 안에서 선언 되면, 그 안에서만 사용이 가능하다. 그리고 블럭이 끝나면 지역변수는 자동으로 삭제 된다. life time : 메모리에 존재하는 시간을 말한다. 전역변수와 지역변수가 이름과 같게 선언되면 지역변수가 전역 변수를 가린다. 함수의 매개 변수도 일종의 지역변수로 그 함수 안의 블럭에서만 사용이 가능하고, 함수가 종료되면 지역변수도 사라진다. 그리고 함수에 인자로 변수가 들어갈 때에는 값이 복사가 되어 원래 선언된 주소와 다른 주소에 할당이 되어 호출된 함수가 종료될 때까지 사용되고 사라진다. 이를 call by value 라고 한다. ..

C++ 2022.04.07

C++ 배열

c++ 배열의 저장 배열의 저장은 각각의 주소값들이 인접하여 저장된다. 다차원 배열도 1차원 적으로 저장된다. 주소값은 많이 다양하게 표현하기에 16진수를 사용한다. 크기는 운영체제 별로 다른데 32bit os는 4byte, 64bit os는 8byte로 표현한다. 배열의 인덱스에 접근할 때에는 유효한 범위인지 판단하지 않는다. 따라서 조심스럽게 활용해야 한다. ubuntu 에서는 선언되는 값들을 붙여서 할당하므로 배열에 유효한 인덱스를 넘게 되면 엉뚱한 곳에 값이 들어갈 수 있다. window의 경우에는 띄엄띄엄 할당 되므로 아예 할당이 안된다. 배열의 이름은 그 자체로 그 배열의 주소다. 그 주소는 배열의 [0]의 주소와 같다. 각각의 배열의 칸의 크기는 배열 안의 아이템의 자료형에 따라서 달라진다...

C++ 2022.04.06