Software Development 378

[C++] 단항 연산자 오버로딩

대표적인 단항 연산자 - 1 증가 연산자 : ++ - 1 감소 연산자 : -- ++pos;-> operator++()의 함수형태로 오버로딩 되어 있다. 멤버함수인 경우 operator++()의 형태, 전역함수의 경우 operator++(Point& ref)의 형태이다.아래와 같이 구현되어있다.1234567891011121314Point& operator++(){ xpos+=1; ypos+=1; return *this;} Point& operator--(){ xpos-=1; ypos-=1; return *this;} cs-> this는 객체 자신의 포인터 값을 의미한다. 즉, 위 함수에서 객체 자신을 참조형으로 반환한다. 그렇기 때문에 객체 자신의 복사본을 만들어 반환하게 된다. 그래서 아래의 형태도 가능..

[C++] const, friend 키워드

const- 객체도 상수화 가능하며, 이는 const 멤버함수의 호출만 허용한다. -> 데이터를 변경시킬 능력이 있는 함수는 아예 호출을 허용하지 않는다. const SoSimple sim(20); - const의 선언유무도 함수 오버로딩의 조건에 해당 -> const로 선언된 객체는 const가 선언된 함수가 호출된다. void SimpleFunc() { ... } void SimpleFunc() const { .... } friend - 클래스를 대상으로 friend선언을 하게되면 선언한 클래스의 private 변수에 직접 접근이 가능하다.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#i..

[C++] 복사 생성자의 호출시점

- 복사생성자 : Link - 복사생성자의 깊은복사 & 얕은복사 : Link복사 생성자의 호출시점- 복사 생성자의 호출시점은 크게 세가지로 구분 1) 기존에 생성된 객체를 이용해 새로운 객체를 초기화 하는 경우 2) Call-by-value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우 3) 객체를 반환하되, 참조형으로 반환하지 않은 경우 1) 기존에 생성된 객체를 이용해 새로운 객체를 초기화 하는 경우 12Person man1("Lee dong woo", 29);Person man2 = man1;cs2) Call-by-value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우123456789101112131415161718192021222324252627282930313233#include..

[C++] 복사생성자의 깊은복사 & 얕은복사

복사 생성자 : http://huiyu.tistory.com/341*디폴트 복사 생성자는 멤버 대 멤버의 복사를 진행한다. 이러한 방식의 복사를 가리켜 '얕은 복사'라 하는데, 이는 멤버변수가 힙의 메모리 공간을 참조하는 경우에 문제가 된다.*디폴트 복사 생성자의 문제점123456789101112131415161718192021222324252627282930313233343536373839404142#include #include using namespace std; class Person{private: char * name; int age;public: Person(char * myname, int myage) { int len = strlen(myname) + 1; name = new char[l..

[C++] 복사 생성자(Copy Constructor)

- C++ 스타일 초기화 int num = 20; int &ref = num;or int num(20); int &ref(num);-> C++에서는 위의 두가지 초기화 방식을 동시에 지원한다. *객체에서는? -> 객체에서도 변수의 초기화와 같이 대입, 괄호 두가지 초기화 방식을 모두 지원한다.1234567891011121314151617181920212223class SoSimple{private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1), num2(n2) {} void ShowSimpleData() { cout