C , C++, C#

C++ 복습 : const static

vhxpffltm 2019. 2. 18. 21:40
반응형

오늘은 예전에 배운 C++의 내용에 대해 다시 공부했다. 취준을 하면서 많이 보고 필요한 내용이지만 정작 몇일 지나면 잊어버린다. 이런일을 방지하고자 이 추적에다 글을 남겨야겠다.


우선 이분의 블로그를 보고 나에게 필요한것만 정리하였다.


*자세한 내용은 이 링크를 타고 확인할 수 있다.* 링크 : https://koocci.github.io/


const : 값이 변경되거나 수정할 수 없다. 선언과 동시에 초기화!!

언제? 사용할까??

          1: 함수내에서 맴버변수에 저장된 값을 변경하지 않을때

          2: const함수 내에서 const가 아닌 함수호출 제한

  EX) set() const , get() const

 

this -> 함수의 파라미터값이 아닌 맴버변수를 사용할때 객체의 주소를 첨조하는 참조자


member Initializer(맴버 이니셔라이져)


생성자 : 맴버변수의 초기화를 목적으로 정의가 됨

그러므로 객체생성과정에서 생성자 호출은 객체의 초기화를 수월하게 해줌 -> 맴버 이니셜라이져 개념나옴


맴버 이니셜라이져 : 선언과 동시에 초기화가 이뤄지는 형태, 맴버변수로 참조자를 선언 가능

-> 많이 쓰이므로 이 모양을 잘 알고 흐름을 따라가야함


깊은복사 : (디폴트)복사생성자 : 정의하지 않으면 자동삽입, 포인터를 참조하도록 생성과 정의

1
2
3
4
5
6
7
Person(const Person& copy) : age(copy.age){
 
    name = new char[~];
 
    strcpy(name,copy.name);
 
cs


// 임시객체를 만듬 -> 참조자의 참조되는 임시객체는 바로 소멸안됨


얕은복사 : 주소를 공유함_문제점, 하나의 주소를 두 객체가 동시에 참조 -> 소멸과정에서 문제발생




C++ const

const Person p(21) -> 객체도 상수화 가능 : 이 객체의 데이터 변경X , Const 맴버함수만 호출가능



friend : A클래스가 B클래스를 대상으로 선언하면 B클래스는 A클래스의 'Private' 맴버에 직접접근 가능! (많이 쓰이지는 않는다.)




Static : 전역 -> 선언된 파일 내에서만 참조 허용

           함수내부 -> 한번만 초기화되고, 함수빠져나와도 소멸X




static 맴버변수(클래스 변수) - 클래스당 하나씩만 생성

 여러개의 객체사 하나의 맴버변수를 공유, 생성 및 소멸시점도 동일, 생성자에서 초기화 하면 안됨 -> 메모리공간에 이미 할당이 이루어진 변수임




static 맴버함수 -> 선언된 클래스의 모든 객체가 공유, 클래스이름으로 호출가능, 객체의 맴버로 존재X

*static 맴버함수 내부에서는 static 맴버변수와 햠후만 호출가능




const static 맴버

const 변수는 선언과 동시에 초기와가 기본 -> 이니셜라이져로 초기화가능


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const static -> class CountryArea{
 
  public:
 
    const static int RUSSIA       = 1707540;
 
    const static int CANADA       = 998467;
 
    const static int CHINA        = 957290;
 
    const static int SOUTH_KOREA  = 9922;
 
};
 
 
cs


요런식으로 초기화 가능


mutable -> const 함수내에서 값변경을 예외적 허용 (잘 안쓰임)

반응형