opp 4

cpp struct와 class의 차이, static

struct vs class struct TestStruct { int _a; int _b; }; class TestClass { int _a; int _b; }; int main() { TestStruct ts; ts._a = 1; TestClass tc; tc._a = 1;// 에러! return 0; } struct와 class의 차이는 기본 접근 지정자의 차이가 있다. struct는 접근 지정자를 적지 않으면 public으로 간주한다. 반면에 class는 private으로 간주한다. struct가 있는 이유는 아마 C언어와의 호환성을 위해서 있는 것 같다. 별로 차이는 없지만 굳이 용도를 구분하자면, struct는 그냥 데이터 묶음(구조체)을 표현할 때, class는 OPP의 특징을 나타낼 때 사..

cpp 객체지향(7-연산자 오버로딩)

연산자에는 대표적으로 사칙 연산, 대입 연산, 비교 연산이 있다. 이때 우리가 만든 클래스는 해당 연산을 사용할 수 없다. 우리가 연산자를 정의하지 않았기 때문이다. 이제 클래스를 위한 연산자를 만들어본다. 연산자 오버로딩 오버로딩은 겉은 같지만 속은 다르다를 떠올리면 된다. 같은 연산자(+, -)라 할지라도 피연산자에 따라 다른 연산을 수행한다. int number = 1 + 1; string str = "예시" + "입니다"; 위와 같은 연산을 수행하면 number에는 2가 str에는 "예시입니다"가 저장된다. 이처럼 연산자는 같지만 자료형에 따라 숫자를 더하거나 문자열을 붙이거나 한다. 멤버 연산자 함수 우리가 정의한 클래스가 연산자를 이용하려면 멤버 또는 전역 연산자 함수를 정의해야 한다. 먼저 ..

cpp 객체지향(6-초기화 리스트)

멤버 변수 초기화 초기화 되지 않은 멤버 변수에는 컴파일이 쓰레기 값을 저장한다. 이는 버그를 발생시키는 주요 원인이다. 따라서 멤버 변수는 초기화를 해야 버그가 발생하지 않는다. 이제 초기화 방법을 알아보자. 초기화 방법 생성자 내에서 설정 class Knight { public: Knight(int hp) { _hp = hp; } public: int _hp; }; 초기화 리스트 초기화 리스트는 상속 관계에서 원하는 부모 생성자를 호출할 때 필요하거나, 포함 관계에서 원하는 클래스의 생성자를 호출할 때 필요하다. // Knight와 포함 관계에 있는 클래스 class Inventory { public: Inventory() { cout

cpp 객체지향(4-은닉성)

은닉성(Data Hiding) Data Hiding == 캡슐화(Encapsulation) 몰라도 되는 정보를 숨긴다. 외부에 공개하는 것과 내부에서 숨기는 것을 따로 지정한다. 왜냐하면 첫 번째, 건드리면 안되는 경우가 있기 때문이다. 두 번째, 다른 경로로 접근하길 원하는 경우가 있기 때문이다. 건드리면 안되는 경우 private : class 내부에서만 사용 protected : 자식 클래스만 사용 가능 class Car { public:// 공개 void MoveHandle(); void PushPedal(); void OpenDoor(); void TurnKey() { RunEngine(); } private:// class Car 내부에서만 사용 void DisassembleCar();// 차..