본문 바로가기

반응형

문과 코린이의, [C. C++] 기록/C++ 이론

(46)
[문과 코린이의 IT 기록장] C,C++ - 복사생성자( 복사생성자란?, 얕은 복사 vs 깊은 복사 ) [문과 코린이의 IT 기록장] C,C++ - 복사생성자( 복사생성자란?, 얕은 복사 vs 깊은 복사 ) 1. 복사생성자란? 1) 복사생성자 형태 : 클래스이름 (const 클래스 이름 &참조변수){ } ex) SoSimple(const SoSimple & copy){ } 2) 복사생성자로 객체 생성 방법 a. 클래스명 생성할 객체 = 이미 생성된 객체; b. 클래스명 생성할 객체(이미 생성된 객체); // 이 방법을 사용하는 것이 더 좋음. // 어처피 전자는 암묵적인 형변환이 일어나기 때문에, explict로 선언된다면 형변환이 불가능하기 때문 3) 기본 복사 생성자 - 기본적으로 제공되는 생성자 중 하나. - 객체간의 변수의 값을 복사해준다. - 호출시키는 객체의 선언과 동시에 초기화할 때 생성한다...
[문과 코린이의 IT 기록장] C,C++ - This포인터( 숨겨져 있는 this 포인터, 명시적으로 this 참조하기 ) [문과 코린이의 IT 기록장] C,C++ - This포인터( 숨겨져 있는 this 포인터, 명시적으로 this 참조하기 ) [ 클래스의 맴버 함수를 호출할 때, C++은 어떻게 호출할 객체(인스턴스)를 찾는가? ] : 이 질문에 대한 정답은, this라는 숨겨진 포인터를 사용한다는 것이다. - main함수 'simple.SetID(2);'에서 보면, SetID()맴버함수가 객체(인스턴스) simple에서 작동해야 한다는 것을 알고, m_ID는 simple.m_ID를 참조한다. 이 과정이 어떻게 작동되는지 알아보자. 1. 숨겨져 있는 this 포인터 1) simple SetID(2); // 이 코드는 맴버 함수 SetID()가 하나의 인수만 가지고 호출하는 것처럼 보이지만, 실제로는 두 개의 인수를 가지고..
[문과 코린이의 IT 기록장] C,C++ - 객체배열 (객체 배열, 객체 포인터 배열) [문과 코린이의 IT 기록장] C,C++ - 객체배열 (객체 배열, 객체 포인터 배열) 1. 객체 배열 ex) 1) 객체배열 형태 : 클래스명 객체명[크기] ex. Person parr[3] - 이 객체배열이 실행될 때, 생성자가 3번 실행된다. (3개의 객체가 생기는 것이므로) - 마찬가지로, return을 만나 소멸할 경우에도, 소멸자가 3번 실행된다. 2) 동적으로 객체 배열 선언하기 Point * p1 = new Point[5]; - 동적으로 객체 배열을 선언하는 경우에도, deflat constructor을 이용해 모두 초기화된다. - 즉, 이 코드는 Point형 객체에 대한, 5개를 사용할 수 있는 메모리 공간을 동적으로 확보하고, 각 공간에 defalt constructor로 객체를 생성한다..
[문과 코린이의 IT 기록장] C,C++ - 클래스, 생성자( 클래스에 대한 이해, 생성자, 매개변수에 따른 생성자 오버로딩, 이니셜라이저(:) 이용, 소멸자 ) [문과 코린이의 IT 기록장] C,C++ - 클래스, 생성자 ( 클래스에 대한 이해, 생성자, 매개변수에 따른 생성자 오버로딩, 이니셜라이저(:) 이용, 소멸자 ) 1. 클래스에 대한 이해 ex ) cf ) 61행에, month == 12? 12 : month & 12에 대한 이해 ? : - 삼항연산자 12 (참, 거짓을 판단할 변수) ? 12(참 일때 사용할 값) : month & 12(거짓일 때 사용할 값) [ 이 코드에서 클래스 관려해 중요시 봐야할 부분 ] 1. 함수의 정의와 몸통이 분리되어 있다. ex. 클래스 내부에, class Date{ ... void Setdate(int year_, int month_, int Date_) ... }; 클래스 외부에, Void Date :: SetDate..
[문과 코린이의 IT 기록장] C,C++ - new & delete (new & delete 사용방법 , new로 배열 할당하기) [문과 코린이의 IT 기록장] C,C++ - new & delete (new & delete 사용방법 , new로 배열 할당하기) [ 시작하기 전 ] - 코딩에서 메모리를 관리하는 것은 매우 중요한 문제이다. - 프로그램이 정확하게 실행되기 위해서는, 컴파일 시 모든 변수의 주소값이 확정되어야 한다. - 이와 같은 현상을 만들기 위해서는 프로그램에 많은 제약이 따르기 때문에, 프로그램 실행 시에 자유롭게 할당하고 해제할 수 있는 힙(heap)이라는 공간이 새로 생겼다. - 이 힙 상에서의 메모리 할당을 지원하기 위해, C++에서는 new & delete함수를 사용하고 있다. * new : 메모리 할당 * delete : 메모리 해제 1. new & delete 사용방법 - int *p = new int;..
[문과 코린이의 IT 기록장] C,C++ - 함수의 오버로딩 (함수의 오버로딩에 대한 이해, 함수의 오버로딩 과정) [문과 코린이의 IT 기록장] C,C++ - 함수의 오버로딩 (함수의 오버로딩에 대한 이해, 함수의 오버로딩 과정) 1. 함수의 오버로딩에 대한 이해 - C++에는 C와는 다른 '함수의 오버로딩'이라는 새로운 기능을 갖는다. * C라이브러리에는 pirntf와, scanf가 1개씩만 존재한다. * 그렇지만 C++에서는 같은 이름을 가진 함수가 여러 개 존재해도 된다. 즉, 함수의 이름에 과부하가 걸려도 상관이 없다는 것이다. - 그렇다면 C++에서 같은 이름의 함수를 호출했을 때 구분하는 방법은? : 함수의 인자를 보고 결정하게 된다. ex) - pirnt함수가 3개나 정의되있음에도 불구하고, C와 다르게 오류가 발생하지 않는 것을 볼 수 있다. - 즉, C++에서는 함수의 이름이 같더라도 인자가 다르다면..
[문과 코린이의 IT 기록장] C,C++ - 레퍼런스(&) (참조자, 함수 인자로 레퍼런스 받기, 참조자의 참조자? , 상수에 대한 참조자, 레퍼런스의 배열과 배열의 레퍼런스, 레퍼런스를 리턴하는 함수) 1. 참조자 (reference) - C++에 새로 도입되는 새로운 개념 * C언어에서는 어떠한 변수를 가리키고 싶을 때는 반드시 포인터를 사용해야 한다. * 그렇지만 C++에서는 다른 변수나 상수를 가리키는 방법으로, 또 다른 방식인 참조자(ref)를 제공한다. - 참조자를 사용하면 포인터에 비해, 불필요한 &와 *의 사용이 없다. 따라서 훨씬 더 코드를 간결하게 나타낼 수 있다. - 참조자란 '또 다른 이름(별명)' 이라고 이해하면 된다. ex ) - int & another_a = a; // another_a는, int형 변수 a의 참조자이다. - another_a = 5; // another_a는 a와 같은 것이므로, a의 값도 같이 변경된 것을 볼 수 있다. 1) 참조자(레퍼런스) 정의 방법 -..
[문과 코린이의 IT 기록장] C,C++ - 상수 (상수와 '함수, 포인터 변수, 클래스, &, 오버로딩'에 관한 내용 이해) [문과 코린이의 IT 기록장] C,C++ - 상수 (상수와 '함수, 포인터 변수, 클래스, &, 오버로딩'에 관한 내용 이해) 1. 상수란? : 처음 정의시 그 값이 바로 주어지고, 한 번 저장된 값은 영원히 바뀌지 않는 것을 의미한다. : 즉, 데이터 초기화가 이루어지면, 그 값을 바꿀 수 없도록 해 주는 것이다. * 따라서 const변수는 데이터 영역에 들어가게 되고, 컴파일과 동시에 데이터 영역 메모리로 올라가 버린다. 1) 상수의 정의 방법 : const (상수의 형) (상수 이름) = (상수의 값) ; 2) 상수 예시 Const int a = 3; // int형 상수 a는, 3의 값을 지닌다. 이 a의 값은 절대 변경될 수 없다. 2. 상수 정의 시 주의사항 1) 상수는 선언과 동시에 초기화되어..

반응형