C++

C++ class

cheesecrust1008 2022. 6. 12. 12:39

객체란 class 타입의 변수라고 생각하면 된다.

객체를 만들어내는 class 에는 멤버 변수와 멤버 함수를 정의할 수 있다.

멤버 변수는 객체의 속성이라고 생각 할 수 있고, 멤버 함수는 객체의 동작을 정의 한다.

그리고 해당 클래스로 만들어낸 객체에서 멤버를 불러올 때에는 도트(.)연산자를 사용한다.

그리고 객체 또한 객체 포인터를 만들어 낼 수 있는데, 이 객체 포인터에서 멤버를 불러 올 때에는 -> 를 사용한다.

 

객체 안에 생성자가 없을 때에는 / 클래스, 클래스 이름 이렇게만 선언 해야 한다.

요약하자면 생성자가 없고 디폴트 생성자만 있을 때에는 () 소괄호를 붙이지 않는다.

또한 디폴트 생성자를 호출 할 때에는 () 를 붙이지 않는다.

만약 ()를 붙이게 되면 함수의 원형을 선언하는 것과 같다.

 

구조체와 클래스, 구조체와 클래스의 차이점은 구조체는 기본으로 선언하게 되면 public 으로 선언된다. 하지만 class 에서는 private으로 선언 한다.

 

class 의 예로는 string class 가 있다. string class의 함수에는 length, size 가 있는데, length() 메소드는 문자열의 길이를 나타내지만, size() 메소드는 해당 string 객체가 메모리에서 실제 사용하고 있는 크기를 나타냅니다.

하지만 반환하는 값은 항상 같다.  그 이유는 char은 1 바이트를 사용하기 때문이다.
string 에는 find 함수도 존재하는데, 이 find 함수가 찾지 못하면 npos 를 반환한다.
string 에서의 erase 함수는 시작과 끝의 주소 값을 넣는 것이 아닌, 시작위치, 인덱스 와 erase 할 length를 인자로 넘겨준다.

class 의 접근자와 설정자

이 접근자와 설정자를 설정 함으로서 잘못된 값이 들어오는 것을 방지 할 수 있다.

 

또한 선언과 구현부를 분리 할 수 있는데, 분리 하여도 똑같다.

또 생성자에 있어서는 초기화 리스트를 사용할 수 있는데, 이 초기화 리스트를 사용하는 경우는 멤버가 상수인 경우와 레퍼런스인 경우이다.

멤버에 객체 멤버가 있을 경우 또한 초기화 리스트로 초기화 한다.

 

복사 생성자는 자신과 같은 타입의 객체를 매개변수로 받는 생성자이다. 

복사 생성자가 없으면 자동으로 모든 멤버 변수의 값을 복사하도록 한다.

 

복사생성자가 호출 되는 경우는 기존 객체를 복사하여 새 객체를 만드는 경우,객체를 값으로 매개변수로 활용하는 경우이다.

strcpy은 strcpy(str2, str1) 은 str2에 str1을 복사, strcpy는 포인터들을 사용하지는 않고 배열의 이름을 인자로 전한다.

strncpy는 마지막 인자로 len을 넣어줘서 len 만큼 복사한다. 

 

배열의 이름은 const 이다. 따라서 포인터로 나타낸 배열은 안의 아이템 값의 수정이 불가능하다. 

int 포인터로 선언을 한다면 인덱싱으로 값을 넣을 수는 없고, 배열을 만든다음에 그 배열의 포인터를 넘겨주어야 한다.

 

namespace는 이름 공간으로 만일 이름 공간에 중복 되도록 변수 이름을 선언한다면 :: 을 이용해서 특정 namespace의 변수를 특정할 수 있다.

 

객체 배열을 만들 때에 있어서 디폴트 생성자를 부를 떄에 있어서 멤버 변수에 디폴트 값이 지정 되어 있으면 그 값들이 들어간다. 

 

정적 멤버는 객체 밖에서 초기화를 해주어야 한다. 

하지만 정적 상수 멤버라면, class ㅇ

'C++' 카테고리의 다른 글

c++ 객체  (0) 2022.05.18
namespace  (0) 2022.05.17
복사 생성자, 복사  (0) 2022.05.17
C++ class  (0) 2022.05.16
C++ 추가 문법  (0) 2022.04.15