const 키워드를 이용하여 변수를 상수화 하듯, 객체도 상수화 할 수 있다.
#include <iostream>
using namespace std;
class Simple{
private:
int num;
public:
Simple(int n) : num(n) {}
void ShowData() const {
cout<<"num: "<<num<<endl;
}
};
int main(){
const Simple obj(5); //const 객체
obj.ShowData(); //const 멤버함수 호출
return 0;
}
void SimpleFunc() { . . . }
void SimpleFunc() **const** { . . . }
친구 !
#include <iostream>
using namespace std;
class B; //클래스 원형
class A {
private:
int num;
friend class B; //A클래스가 B클래스를 대상으로 friend선언을 함.
public:
A(int num) : num(num) {}
}
c++에서는 각각의 클래스별로 전역변수를 사용하고자하는 상황이 발생할 수 있다. 그러나 그냥 전역변수를 사용하면 그 변수에 대해 제한을 시켜줄 장치가 존재하지 않기 때문에, static멤버를 사용하여 그 역할을 대신한다.
/* 자료형 클래스이름::클래스변수이름 = 초기화값 */
int SoSimple::simObjCnt = 0;
객체가 생성될 때마다 몇번째로 생성된 객체인지를 알려주는 프로그램
객체 생성될 때마다 해당객체의 클래스변수값을 증가시켜 그 클래스의 객체끼리 공유하는 변수로서 기능을 구현해냈다.
#include <iostram>
using namespace std;
class SoSimple {
private:
static in simObjCnt;
public:
SoSimple(){
simObjCnt++;
cout<<simObjCnt<<"번째 SoSimple 객체"<<endl;
}
};
int SoSimple::simObjCnt = 0;
class SoSimple2 {
private:
static in sim2ObjCnt;
public:
SoSimple2(){
sim2ObjCnt++;
cout<<sim2ObjCnt<<"번째 SoSimple2 객체"<<endl;
}
};
int SoSimple2::sim2ObjCnt = 0;
int main(){
SoSimple sim1;
SoSimple sim2;
SoSimple2 sim21;
SoSimple2 sim22;
SoSimple2();
return 0;
}
객체이름을 이용한 접근 (.
)
ex) obj1.simObjCnt
클래스 자체를 이용한 접근 (::
) → 단 이런 접근은 public static
멤버인 경우에만 가능하다.
ex) SimClass::simObjCnt
static 멤버함수 또한 static 멤버변수와 동일한 특징을 가진다.
const static으로 선언되는 멤버변수는 상수라는 의미의 const키워드가 추가되었기 때문에, 따로 초기화해주지 않고 선언과 동시에 초기화가 가능하다.
int SoSimple::simObjCnt = 0;
const static int SIMOBJCNT = 0;