전위 후위 연산자 오버로딩 연산자 오버로딩 * ++연산자나 --연산자는 전위, 후위가 따로 있다. * 연산자 오버로딩을 할 때 전위, 후위를 구분하는 방법은 매개변수 int의 유무이다. 전위, 후위 구분 방법 * operator++()는 전위 연산 오버로딩이고, operator++(int)는 후위 연산 오버로딩이다. * 매개변수에 의미없는 int를 넣어주는 것이 구분 방법이다. 후위 연산은 복사가 일어난다. * 후위 연산은 나중에 연산이 일어난다고 생각할 수 있다. * 하지만 와 를 모두 만들어서 를 반환하는 것이다. * == 새로 복사한 데이터 == 기존 데이터에 연산 * 따라서 후위 연산 오버로딩 할때 데이터 복사가 일어나 연산량이 많아질 수 있다. 코드 class A { public: A(int a..
friend 키워드 friend 기능 * 접근지정자를 무효할 수 있는 예외적인 기능을 제공한다. 외부에서 private, protected 멤버를 접근할 수 있다. * 클래스 선언에서 외부 클래스나 함수를 friend로 명시하면, private나 protected 멤버 변수, 함수를 public처럼 접근할 수 있다. * 자바에서 같은 package안에 있는 디폴드 접근지정자와 기능이 비슷하다. friend 선언 // 외부 함수 선언 class Vector { public: friend void print_vector(Vector* vector); Vector(int x, int y) { mX = x; mY = y; } private: int mX; int mY; }; void print_vector(Ve..
접근지정자 클래스명 (매개변수목록){ } 생성자란 * 생성자는 객체를 생성할때 호출되는 일종의 메서드이다. 객체 생성 시 반드시 호출된다. * 반환형이 없고 클래스명으로 이름을 지어야한다. 생성하지 못하는 생성자 * 생성자를 private로 만들 수도 있다. 당연히 외부에서 new 객체를 하여도 만들 수 없다. * 이 생성자는 내부에서만 호출이 가능하다. 예를 들어 public 생성자가 내부에서 private 생성자를 호출할 수 있다. 또는 클래스의 객체 생성을 원하지 않을 때 사용하기도 한다. 기본 생성자 Default Constructor * 클래스를 만들 때 생성자를 만들지 않으면 자동으로 추가되는 생성자 컴파일러가 알아서 넣어준다. * 기본 생성자는 매개변수가 없고, 생성자에 내용이 없다. (멤버..
가변인자 가변인자란? * 자바나 C# 같은 객체지향 언어를 사용했다면 함수 오버로딩을 쉽게 접했을 것이다. C에서 비슷한 효과를 내기 위해 즉, 매개변수가 몇 개 들어올지 모를 때 사용한다. (함수 오버로딩이랑 비슷하지만 차이점은 분명히 있다.) * 구조체나 포인터, 정수형 변수, 실수형 변수 전부 들어간다. 함수의 선언 * count 개수만큼 들어오는 변수를 더하는 함수를 만들어보겠다. * #include 를 꼭 해야 한다. #include int add_all_num(int count, ...) { va_list ap; va_start(ap, count); { // 코드 va_arg(ap, int); } va_end(ap); } * 가변인자 함수의 전체적인 흐름이다. * va_start와 va_end..