본문 바로가기

C++17

[C++]static 정적 변수와 Class static 정적 변수 static 정적 변수는 전역 변수의 성질과 namespace기능을 가진 변수입니다. static 정적 변수는 2가지 성질을 가집니다. 1.static 정적 변수는 프로그램이 시작될 때 메모리를 잡습니다. 즉, 프로그램이 시작될 때 정적 변수가 생성되고 초기화되며 프로그램이 종료할 때까지 존재합니다. (전역 변수의 성질) 2. static 정적 변수는 선언된 지역(scope)에서만 사용이 가능합니다. (지역 변수의 성질) void func(); int main() { func(); func(); func(); return 0; } void func() { static int nData = 0; nData++; printf("%d \n", nData); } func()라는 함수가 있.. 2018. 2. 27.
[C++]friend 키워드 friend 키워드 friend 키워드는 그 뜻이 '친구'라는 뜻과 마찬가지로 class와 class 간에 친구(friend) 관계를 형성할 수 있도록 합니다. A class와 B class 있고, 둘 다 private 멤버를 가지고 있다면 이 private 멤버는 외부에서 직접 접근할 수 없습니다. 그러나 A class에서 B class를 friend 키워드를 통해 친구로 지정하면 B class는 A class의 private 멤버에 직접 접근이 가능해집니다. 하지만 A class는 B class의 private멤버에 직접 접근이 불가능합니다. A class가 B class의 private 멤버에 직접 접근하려면 B class에서 A class를 친구로 지정해야 합니다. 조금 헷갈리실 수 있는데, 쉽게.. 2018. 2. 21.
[C++]Class의 기본 형태 Class의 기본 형태 class를 구현할 때 기본적인 모습은 다음과 같습니다. class C_DATA { private: ... public: C_DATA(); C_DATA(const C_DATA &) = delete; const C_DATA& operator=(const C_DATA &) = delete; virtual ~C_DATA();// class가 상속을 받는 다면 추가되어야할 내용 public: void init(); void release(); void setData(int nData); int getData(); }; 생성자는 기본적인 초기화 작업을 하며 이후 초기 값 세팅은 init() 함수를 따로 구현하여 사용합니다. 소멸자의 경우 아무 일도 하지 않도록 하며 굳이 정의하지 않아도 되.. 2018. 1. 30.
[C++]순수 가상함수와 추상 클래스, 인터페이스(interface) 순수 가상함수 class 상속에서 virtual 키워드를 통해 오버라이딩 함수(가상함수)를 구현 class 상속의 다형성을 구성했는데, 여기서 문제점이 하나 발생하게 됩니다. 부모 class에서 구현한 가상함수를 자식 class가 반드시 구현해야 한다는 강제성이 없다는 것입니다. 즉, 부모 class에서 가상함수를 구현했지만 자식 class에서 이 가상함수를 오버라이딩 하지 않아도 된다는 것입니다. 이렇게 되면 class 상속을 통해 다형성을 구성하지 못합니다. 이 때문에 등장한 것이 순수 가상함수입니다. class C_PARENT { public: virtual void func() abstract; //virtual void func() = 0; //virtual void func() = NULL; .. 2018. 1. 30.
[C++]Class 상속 Class 상속 class에서 상속은 상위 개념을 하위 개념이 상속받아서 사용하는 것입니다. 그리고 상속을 사용하기 위해서는 추상화와 구체화의 구분이 명확해야 합니다. 따라서 class 상속을 공통적인 부분을 구현하여 상속받아 사용한다는 것은 틀린 개념이고, 이렇게 사용할 경우 추후에 수정이나 추가를 해야 할 경우 구현해야 하는 부분이 많아지고 복잡해집니다. Class 상속 사용 방법 상위 class(부모 class)를 하위 class(자식 class)가 상속받기 위해서는 하위 클래스 이름 옆에 ' : '와 접근 제한자, 그리고 상속할 class 이름을 붙여주시면 됩니다. class C_PARENT { ... }; class C_CHILD : public C_PARENR { ... }; Class 상속의.. 2018. 1. 30.