본문 바로가기

프로그래밍/C++

(37)
함수 포인터 함수 포인터 : 함수의 시작 주소를 저장하는 포인터 함수의 이름은 함수가 시작하는 시작 주소이다. ex) void Print(int n) { cout
template template : 타입을 가변적으로 사용할 수 있도록 해준다. 타입을 여러개 받아서 사용할 수도 있다. 제한이 없다. 형태 : template / template 템플릿은 클래스나 함수에서 사용할 수 있다. ex) 아래처럼 해주게 되면 T가 변수 타입이 된다. 템플릿의 타입은 컴파일 시간에 정의가 된다. 이 함수를 호출하면서 타입이 정해지기 때문이다. 함수를 호출하는 구문을 컴파일러가 분석할 때 어떤 타입인지 정해지게 된다. template T Sum(T a, T b) { return a+ b; } int main() { // 아래처럼 명시적으로 타입을 지정해줄 수 있다. cout
const와 static const : 변수를 상수값으로 만드는 용도, 객체의 데이터 변경을 허용하지 않게 하고 싶을 때 사용한다. 클래스 멤버함수는 함수 선언 끝에 const를 붙일 수 있다. const를 붙이게 되면 이 함수 안에선느 멤버변수의 값을 변경할 수 없다. 이 클래스를 이용해서 생성한 객체가 const로 생성이 되면 일반 멤버함수는 호출이 불가능하다. 함수 뒤에 const가 붙은 멤버함수만 호출이 가능하다. ex) int GetVariable() const { return iVariable; } const의 사용 예시 1. const int iNum = 10; -> 변수 num을 상수화한다. 2. const int * ptr1 = &val1; -> 포인터 ptr1을 이용해서 vall의 값을 변경할 수 없다. 3. ..
복사생성자 다른 객체의 데이터를 복사해서 객체를 생성할 수 있도록 해주는 생성자이다. 만약 복사생성자가 없다면 기본 복사생성자를 활용하게 된다. 인자로 해당 클래스의 객체를 받게 되어있고 그 객체를 복사해주게 된다. 얕은 복사 (Shallow Copy) : 단순한 값을 복사하는 방식이다. 기본 복사생성자는 얕은복사를 해준다. 깊은 복사 (Deep Copy) : 값 뿐만 아니라 동적할당된 공간은 새로 공간을 할당해주고 기존 객체의 동적할당된 공간의 값을 새로 할당된 공간에 복사해주는 방식이다. class SoSimple { private: int num1; int num2; public: SoSimple(int n1, int n2) : num1(n1), num2(n2) { } void ShowSimpleData() ..
Reference (참조자) Reference : 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름, 다른 대상을 참조할 수 있는 기능이다. Reference는 그 자체가 참조하는 대상이 된다. 일종의 별명을 붙여주는 것이다. 반드시 변수 선언과 동시에 참조하는 대상을 지정해주어야 한다. 값을 복사하지 않고 같은 메모리 공간의 이름(참조)이다. Reference와 Pointer의 차이점 : Pointer는 다른 대상을 참조하기 위해서 참조할 대상의 메모리 주소를 담아두고 참조를 한다. Reference는 주소를 저장하는 것이 아니라 바로 접근하여 참조할 수 있게 만들어준다. Reference에 const가 붙으면 참조하는 대상의 값을 변경할 수 없다. 단순 값 참조용으로만 쓴다. Reference 변수는 선언할 때만 참조 대상..
while과 do while, #define과 inline while문과 do while문의 차이 do while : 처음 한번은 코드블럭 안의 코드가 무조건 동작되고 그 후에 조건식을 체크하여 true일 경우 반복하게 된다. while : 시작부터 조건을 체크한다. 열거체 : 숫자에 이름을 부여하여 연속된 상수에 이름을 주거나 아니면 원하는 상수값에 이름을 부여해줄 수 있다. 일종의 사용자 정의 타입을 만들어내는 것이다. 그렇기 때문에 main 바깥에 열거체를 만들어두고 main 안에서 사용할 수 있다. enum 문의 이름이 곧 변수 타입이 될 수 있고 4 byte의 크기를 가지게 된다. #define과 inline #define : 전처리기에서 처리된다. ex) #define FOUR 4 -> FOUR라는 이름에 4를 부여해놓고 이 FOUR를 사용한 모든 코..
C++ 기초 2 컴파일 과정 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 값에 의한 전달 (Call by Value) : 함수를 호출하면서 파라미터를 넘길 때 값이 복제되어 전달된다. 참조에 의한 객체 전달 (Call by Reference) : 파라미터로 넘겨지는 객체가 복제되는 오버헤드를 피하기 위해 사용한다. 주소값만 복제되고 내용은 복제되지 않기 때문에 값에 의한 전달보다 효율적이다. 얕은 복사 (Shallow Copy) : 비트 단위 복제, 포인터가 가리키는 데이터는 빼놓고 피상적으로 그 변수값, 즉 주소값만 복제하는 것이다. 깊은 복사 (Deep Copy) : 포인터 변수값만 피상적으로 복제하지 않고 그 변수의 맥락에 맞게 연관된 데이터까지 재귀적으로 온전하게 복제하는 것이다. 클래스가 동적 할당 메모리를..
C++ 기초 #include : 헤더 파일을 여기에 포함시키는 기능이다 (전처리기) 실행 과정 : 컴파일 -> 빌드 -> 수행 컴파일 : 번역작업이다. Ctrl + Shift + B 를 이용해서 컴파일 및 빌드를 할 수 있다. C++ 표준 기능의 대부분은 std라는 namespace 안에 존재하고 있다. 이름이 겹치는 것을 방지해주기 위해서이다. cout : 콘솔 창에 출력해주는 기능이다. 뒤에 있는 ""안에 있는 문자들을 화면에 출력해준다. 문자를 여러개 사용할 때는 반드시 "" 안에 넣어주고 이런 것을 문자열 이라고 한다. endl : 개행 기능이다. 변수 : 변하는 수. 값이 바뀔 수 있다. 용량의 최소 단위 : bit 1byte = 8bit 1kbyte = 1024byte 1mbyte = 1024kbyte 1..