상세 컨텐츠

본문 제목

C++언어 강좌(공부) #3~7장

카테고리 없음

by 바래다주기 2024. 5. 7. 05:13

본문

3. 캡슐화

캡슐화 : 관련 있는 모든 것들을 하나의 클래스에 묶어두는 행위 클래스의 기능이 중요한 것일 뿐, 내부의 구성이 중요한                    것은 아니기 떄문

Explicit : 생성자를 호출할 때 대입 연산자를 이용하여 값을 대입하면 자동 형변한 진행 -> 오버로딩이 진행되는 묵시적                      형변한이 진행됨 프로그래머가 의도하지 않는 묵시적인 동작은 전혀 좋은 행위가 아님 묵시적 형변환을 원치 않                  을 경우 생성자, 소멸자 앞에 explicit 키워드 선언

4. 객체 배열

객체 배열이란 : 객체 여러 개를 연속된 메모리 공간에 배역 형식으로 선언? -> 가능
                          Static : CObj Obj[3];
Dynamic : CObj* Obj = new CObj[3];
                  동적 배열의 경우 소멸자는 할당 해제가 일어날 때 호출
                  But! 위의 두 방식은 매개변수를 가지는 생성자의 호출이 일어나지 않음
                  -> CObj* Obj[3] = { new CObj(100), new CObj(200),... }
                  위와 같은 형식을 통해 매개변수를 가지는 생성자의 오버로딩이 가능해짐

5. 상호 참조와 전방 선언

상호 참조 : 여러 클래스에 대해 include 할 경우 상호 간의 헤더를 include 하게 되어 전처리기 단계에서
                   서로에 대한 참조가 계속하여 발생하게 되고, 이로 인해 무한 루프에 빠지게 되는 현상

전방 선언 : 상호 참조를 해결하기 위한 방식으로 헤더파일 -> class CPlayer; Cpp파일 -> #include "Player.h"
                   형식으로 선언하여 헤더에서는 해당 클래스의 존재만을 확인하고, 실제로 작업이 일어나는 Cpp파일에서 헤더                     를 참조하므로써 상호 참조 방지
                   + 멤버 변수로 객체를 선언할 경우 포인터로 선언 (객체의 크기와 상관 없이 포인터의 크기는 4Byte -> 크기로                    인해 발생하는 문제 해결)

 

But! 해당 방식이 좋은 방식은 아니다 헤더 파일은 헤더 파일에 포함시키되, 삼호 참조가 발생하지않도록 고려하는것이 Best!

6. Const 함수

cosnt 함수 : 목적) 함수의 기능을 읽기 전용으로 사용하기 위함
                     선언부의 맨 뒤에 const 키워드를 붙이므로써 선언

                    특징

  1. const함수 내에서는 멤버 변수의 가공이 불가능하다
    But! cout에 멤버 변수를 사용한 식을 넣는 행위는 가능 -> cout 자체를 기능으로 인식
    또한 멤버 변수가 아닌, const함수 내에서 선언한 함수의 변수는 가공 가능
  2. const함수는 const함수끼리 호환된다
    const가 없는 함수의 경우, 해당 함수 내부에서 멤버 변수의 가공 여부에 대해 확인이 불가능하므로 호환하지 않는다
  3. const함수끼리 오버로딩이 가능하다
    같은 이름을 가진 함수의 경우, 일반 객체는 일반 함수를, const객체는 const함수를 호출한다

7. Static함수

Static : 내부에서 접근이 가능한 Data 영역에 변수를 등록, Static 변수를 다시 호출할 때 초기화식은 건너뛰며, 기존에 선               언된 Static변수 호출

 

Static함수 : 클래스 내에서 선언된 Static 함수는 클래스의 멤버 변수가 아니다.
                    클래스명::Static함수명 형식으로 사용하며, 해당 클래스의 선언 없이 사용이 가능하다

                    해당 함수의 초기화를 진행할 경우, 클래스의 멤버도 아닐 뿐더러 선언 시기도 다르므로 클래스 외부에서 초                        기화를 진행한다
                    Static함수는 Const함수처럼 클래스 내부의 멤버 변수를 가공 할 수 없는데, 이는 Static함수가 클래스의 멤버                      가 아니기 때문에 발생하는 현상이다
                    Static함수를 외부의 것으로 판단하게 되어 Get, Set함수를 사용하여 해당 클래스의 멤버 변수에 대한 주소를                      넘겨주면 가공을 할 수 있다

 

클래스 내의 Stateic 변수 : 같은 타입의 객체를 여러 개 만든 후 해당 클래스 내에 Static 변수가 존재한다면 생성된 객체들                                             은 클래스의 Static변수를 공용으로 사용한다

 

위의 특성을 이용하여 기능 만을 제공하는 기능성 클래스 생성 가능 -> 클래스를 선언하지 않고, 클래스명::Static함수명 형식으로 함수만 호출하여 사용