cpp 공부하기 시리즈1

상위1% 미디어개발자·2025년 4월 3일

cpp에서의 static 변수

C언어에서의 static은
1) 전연변수에 선언 된 static의 의미
-> 선언 된 파일 내에서만 참조를 허용하겠다는 의미
2) 함수 내에 선언 된 static의 의미
한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다.

cpp에서의 static
1) static 멤버변수

class SoSimple
{
private:
static int simObjCnt; // static 멤버 변수, 클래스 변수  
public:
SoSimple()
{
SimObjCnt++;
cout<<SimObjCnt<<"번째 SoSimple 객체"<<endl;
}
int SoSimple::simObjCnt=0; // static 멤버 변수의 초기화 


int main(void)
{
SoSimple sim1;
SoSimple sim2;
SoSimple sim3;
}

sim1, sim2, sim3 객체가 static 변수 simObjCnt를 공유하는 구조가 된다.

static 멤버 변수는 객체내에 존재하지 않는다. (static 멤버 함수도 마찬가지...)
static 멤버 함수 내에서는 static 멤버변수와 static 멤버 함수만 호출이 가능하다.
(전역변수와 전역함수를 대체할 수 있다.)

const static 선언과 동시아 초기화가 가능하다.

static은 객체없이 접근 가능하다.

순수 가상함수와 추상클래스

클래스 중에서는 객체 생성을 목적으로 정의 되지 않은 클래스도 존재한다.

Class Employee
{
private:
char name[100];

public
Employee(char *name) {....}
void ShowAYourName() const {....} // const 멤버 함수, 읽기만 가능
virtual int GetPay() const
{
return 0;
}
virtual void ShowSalaryInfo() const {}
};

Employee * emp = new Emplyoee("Lee Dong Sook")
이러면 컴파일러에서 에러를 발견하지 못한다.
(아직 다른 멤버 함수들이 정의 되지 않음...)
순수 가상함수 함수란 함수의 몸체가 정의 되지 않은 함수를 의미한다.

virtual int GetPay() const = 0;
virtual void ShowSalaryInfo() const = 0;

0을 대입하므로서 명시적으로 몸체를 정의하지 않았음을 컴파일러에게 알린다.
이렇게 되면 잘못 된 객체 생성을 막을 수 있다.
그리고 이렇듯 하나 이상의 멤버함수를 순수 가상함수로 선언한 클래스를 가리켜 추상클래스라고 부른다.
이는 완전하지 않은, 그래서 객체 생성이 불가능한 클래스라는 의미를 지닌다.

다형성 = 문장은 다른데 결과는 다르다 (오버라이딩)

가상 소멸자

항상 소멸자에는 웬만하면 virtual로 소멸자를 선언하는 것이 좋다.
이유는 즉슨... 예를들어

int main(void)
{
First *ptr = new Second("simple", "complex");
delete ptr;
return 0;
}

class가 First와 Second 가 있다고 가정했을 때, 이 경우 가상소멸자를 사용하지 않으면 First 객체의 소멸자만 불린다...

소멸자를 쓰는 경우 상속 구조에서

Class First
{
public : 
virtual ~First()
};
Class Second : public First
{
public : 
virtual ~Second()
};
Clss Third : public Second
public : 
virtual ~Third()

3->2->1 순서로 소멸자가 호출 됨.

얕은 복사와 깊은 복사

템플릿이란

profile
상위1% 미디어개발자

0개의 댓글