C++

    [C++] 인터페이스 (interface)

    [C++] 인터페이스 (interface)

    1. 인터페이스 (interface) 개념 #include class Camera { public: void take() { std::cout 모든 카메라는 ICamera로부터 파생 되어야 한다. #include class ICamera { public: virtual void take() = 0; }; class People { public: void useCamera(ICamera* p) { p->take(); } }; int main() { } ③ 카메라 사용자 (People 클래스) => 규칙대로만 사용하면 된다. => 순수 가상 함수로 되어 실물 카메라가 없어도 People클래스를 먼저 만들 수 있다. ④ 모든 카메라 제작자 (Camera 클래스) => 반드시 규칙을 지켜야 한다. #includ..

    [C++] 추상 클래스 (abstract class)

    [C++] 추상 클래스 (abstract class)

    1. 추상 클래스 (abstract class) class Shape { public: virtual void Draw() = 0; }; class Rect : public Shape { public: virtual void Draw() { } // 구현 }; int main() { Shape s; // error Shape* p; // ok Rect r; // 구현부가 있으므로 ok } ① 순수 가상 함수 (pure virtual function) => 함수의 구현부가 없고, 선언부가 =0 으로 끝나는 가상함수 ② 추상 클래스 (Abstract Class) => 순수 가상 함수가 한 개 이상 있는 클래스 ③ 추상 클래스 특징 => 객체를 생성할 수 없다. => 포인터 변수는 만들 수 있다. ④ 추상 클..

    [C++] C언어와 다른 C++ 함수(1)

    [C++] C언어와 다른 C++ 함수(1)

    1. default parameter - 함수 호출 시 인자를 전달하지 않으면 미리 지정된 인자값을 사용할 수 있다. void move(int x, int y = 0, int z = 0) { } int main() { move(1, 2, 3); move(1, 0, 0); move(1); // 1, 0, 0 move(1, 10) // 1, 10, 0 } - 함수의 마지막 인자부터 차례대로 디폴트 값을 지정해야 한다. void move(int x = 0, int y) { } // error int main() { move(3); // y에 3이 적용될 것인가? } //----- 예시 ------ void t1(int a, int b, int c = 0) { } // ok void t2(int a, int b..

    [C++] namespace 개념

    [C++] namespace 개념

    1. namespace의 필요성 - 프로그램을 개발하다 보면 수백개의 파일로 구성될 수 있고 동시에 여러명의 개발자가 같이 작업할 수 있다. - 그 과정에서 함수나 구조체에 대한 이름충돌이 발생할 수 있다. 다음과 같은 스크립트가 있다고 하면 main에서 호출한 move함수는 무엇을 호출하는지 몰라 에러가 나온다. 해결방법으로 함수의 이름을 모두 다르게 하는 것도 방법이겠지만 그렇게 바꾸다 보면 헷갈리는 경우도 생긴다. 이럴 경우 namespace를 사용하여 위와 같은 형태로 바꿀 수 있다. namespace로 묶여있지 않은 move함수는 global namespace라고 부른다. namespace로 묶여있는 함수는 위와 같이 호출 할 수 있다. namespace로 묶여있지 않는 move는 평소와 같이 ..