Soft Ware 130

소멸자!!

생성자 가 있으면 당연히 소멸시키는 소멸자가 있기 마련이다 !!! 소멸자란 .... 소멸자는 객체가 블럭통영범위가 끝났을때 즉 스코프 가 끝났을때 객체 이름이 사라지기 전에 소멸자를 호출한다. 소멸자는 무엇을 할때 편할까?? 클래스를 동적 할당을 했다고 과정해보자 그럼 우리는 프로그램이 끝나기전에 할당한 클래스를 하나하나씩 소멸해야할것이다 그럼 가독성이 떨어진다. 이를 위해 소멸자를 이용하여 동적 할당된 객체들을 스스로 해체할수 있다. ex> #include class Book { int *Data; public: Book(int _data) { Data = new _data; } ~Book() { delete Data; } }; 이처럼 소멸자를 정의하여 쉽고 빠르게 프로그램이 끝났을때 소멸자를 호출하여..

생성자!!

생성자란? -> 생성자라는 말을 처음 듣게 되었을것입니다. C언어에서는 존재하지 않고 C++에서 존재하는 것으로 클래스를 선언 하고 객체를 생성할때 자동으로 생성 및 사용자에 의해 정의할수 있는데요. 좀더 알아보기 전에 객체가 할때 무슨일이 발생하는지 부터 알아보겠습니다. 객체를 생성했을시 먼저 메모리 공간을 확보하고 생성자라는것이 실행됩니다. 예제를 통해서 알아보겠습니다. class Song { int a; public: Song(){cout

C++의 함수 오버로딩!!

함수 오버로딩 이란 -> 함수의 이름이 같고 매개변수의 타입이 다르고 개수가 다르며 마지막으로 리턴 타입이 같아야 된다. 말로 하면 무슨말인지 모를수 있다 예제를 들어보겠다. int add() int add(char) int add(char,char) 이경우는 함수 오버로딩이 된다. int add(char) char add(int) 이경우는 함수 오버로딩이 되지 않는다 그 이유는 리턴 타입이 다르기 때문이다. -------------------------------------------------------------------------------------------- 디폴트 매개 변수 디폴트 매개 변수란? -> 함수의 매개변수를 C++에서는 인자값이 없을 경우에는 자신이 원하는 값으로 설정할수 있는..

메모리 접근 및 캐스팅 문제 !!!

#include double d = 3.14; struct test { int a; double *d; }x={100,&d}; struct test*func(void) { return &x; } void my_test(char a, ...) { printf("%f\n",**(double**)((unsigned char*)&a+4)); printf("%f\n",*(*(struct test**)((unsigned char*)&a+8))->d); printf("%f\n", *((*((struct test* (**) (void))(&a+12)))()->d)) ; } void main(void) { my_test('A',&d,&x,func); } 함수가 호출 되고 매개변수들은 지역변수 임으로 스택에 차곡차곡 채워..