목록2024/03 (32)
Minwoo Dev.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cHFe31/btsFSb7xcFf/hMx4IDespwQEkhW8RYRC7K/img.png)
디폴트 생성자(Default Constructor) #include using namespace std; class MyClass { private: int num; public: // 생성자 없음!!!! void SayHi() { cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/o2ZMw/btsFRkKKAS6/Jkd7hHXcV5eSDmKZkyX9Xk/img.png)
생성자(Constructor) 생성자는 객체 생성 시 호출된다 함수의 일종이라 오버로딩이 가능하다. 함수의 일종이라 디폴트 값을 선언해줄 수 있다. 생성자를 사용하면 클래스를 이용하여 객체를 생성할 때, 객체의 생성과 동시에 초기화가 되게 할 수 있다. #include using namespace std; class MyClass { private: int num; public: MyClass(int n) // 생성자!!!! { num = n; } void ShowNum() { cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwKC3n/btsFQS1RJAX/HntEGh3gOn95Ehe790APM0/img.png)
x와 y 에 대한 점을 나타내는 Myclass라는 클래스가 있다고 하자. 보통 생성자를 통하여 값을 전달받아 사용하는 방식으로 코드를 작성하면 아래와 같을 것이다. #include using namespace std; class Myclass { private: int x; int y; public: Myclass(int xpos, int ypos) { x = xpos; y = ypos; } void ShowPoint() const { cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mvFRR/btsFQfJRqLJ/KRMkz8MUG7MGnzYPymzmx1/img.png)
문제 문제 04-3의 문제 2를 통해서 NameCard 클래스를 정의하였다. 그런데 이 클래스도 생성자 내에서 메모리 공간을 동적 할당하기 때문에 복사 생성자가 필요한 클래스이다. 이에 복사 생성자를 적절히 정의해보기 바라며, 복사 이후에 문제가 발생하지 않음을 다음 main 함수를 통해서 확인하기 바란다. [main 함수의 예] int main(void){ NameCard manClerk("Lee", "ABCEng","010-1111-2222",COMP_POS::CLERK); NameCard copy1=manClerk; NameCard manSENIOR("Hong","OrangeEng","010-3333-4444",COMP_POS::SENIOR); NameCard copy2=manSENIOR; copy..
C언어에서는 동적 할당을 위해 malloc, free를 사용했다. #include using namespace std; char *MakeStrAdr(int len) { char *str = (char *)malloc(sizeof(char) * len); return str; } int main(void) { char *str = MakeStrAdr(20); strcpy(str, "Hi !! I am Minu!!"); cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bENN8C/btsFEX3UcHS/NS57u0LD9maz88Xhaa3E60/img.png)
const 참조자 #include using namespace std; int main(void) { const int num = 10; // 변수같아 보이지만 상수. 정확히는 상수화된 변수 int &ref=num; // 상수화된 const 값을 참조 불가, 변수만 참조가능 num+=10; // const 값은 변경불가! return 0; } 위 코드는 num이라는 변수를 const를 사용하여 변경할 수 없도록 만들었다. 그리고 그 값을 ref가 참조하여, ref를 통해 num을 변경하고자 한다. 위 코드는 오류가 발생한다. 실행이 된다면 num 을 const로 선언한 이유가 없을 것이다. 이럴 때, const 참조자를 사용한다. #include using namespace std; int main(vo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oe7Ki/btsFFSBt5zM/oleXywuUHdRfVsmjzZ5jj0/img.png)
참조자를 이용해서도 포인터를 사용하는 것처럼 Call-by-reference 형식의 함수를 만들 수 있다. Call-by-reference 함수 외부의 값을 받아와 함수 내부에서 값을 변경할 수 있는 형태 C언어에서는 포인터를 사용하여 함수 외부의 값을 함수 내부에서 변경할 수 있었다. 우선, 포인터를 이용한 기존의 방식부터 살펴보자. 포인터를 이용한 Call-by-reference 함수 #include using namespace std; void Swap(int *n1, int *n2) { int temp = *n1; *n1 = *n2; *n2 = temp; } int main(void) { int num1 = 3, num2 = 5; cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdQcZt/btsFFNNqrKO/X8BqlSwBjTEgve7J4LIUrK/img.png)
참조자 참조자는 변수에 다른 이름, 즉 별명을 붙여주는 것이다. #include using namespace std; int main(void) { int num = 20; cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/del87O/btsFEMuOVHQ/X5iPKG170LoomgLrM2rkwK/img.png)
문제 1 앞서 제시한 문제 04-2를 해결하였는가 ? 당시만 해도 생성자를 설명하지 않은 상황이기 때문에 별도의 초기화 함수를 정의 및 호출해서 Point, Circle, Ring 클래스의 객체를 초기화하였다. 이때 구현한 답에 대해서 모든 클래스에 생성자를 정의해보자. 04-2의 코드 #include using namespace std; class Point { private: int xpos, ypos; public: void Init(int x, int y) { xpos = x; ypos = y; } void ShowPointInfo() const { cout