본문 바로가기
반응형

c++10

[C++] 클래스 템플릿 템플릿 기존의 C타입으로 함수를 작성했을때 문제점은 정의 당시의 자료형으로만 활용이 가능하기 때문에 다른 자료형으로 같은 기능을 하게 하기 위해서는 함수를 다시 정의해야 한다는 점이다. 그러한 부분을 해결해 줄 수 있는 것이 클래스 템플릿이다. 클래스 템플릿을 간단하게 설명하자면 클래스의 멤버 와 멤버 함수에 사용되는 자료형의 추상화 이 될것 같다. 자세한 내용은 클래스 템플릿을 이용해 구현한 배열 예제를 보면서 설명한다. ClassArray.h template // 템플릿 T를 사용한다고 선언. 클래스를 선언하기전에 꼭 기술되어야 함. class ClassArray { private: T *pData; //배열의 데이타에 해당. 템플릿 T를 이용해 자료형을 명확히 부여하지 않음. int iCount; .. 2023. 2. 11.
[C++] 레퍼런스(reference)와 클래스 연산자(operator) 레퍼런스(reference) 레퍼런스는 포인터와 비슷한 개념이다. 자바에서는 포인터가 없는 대신 레퍼런스 개념만 존재하는데 c++에서 레퍼런스도 자바의 레퍼런스랑 비슷한 개념이다. 레퍼런스는 단어 뜻 그대로 참조라고 생각하면 되는데, 포인터의 역참조를 기호없이 사용한다고 봐도 된다. int a = 1; int& r = a; r = 2; // a: 2, r: 2 위와 같은 코드를 포인터로 변경하면 다음과 비슷하다고 볼 수 있다. int a = 1; int* const p = &a; *p = 2 ; // a: 2, *p: 2 레퍼런스는 윈도우의 '바로가기'개념과 비슷하다고도 생각 할 수 있겠다. 레퍼런스 r은 처음에 초기화할때 a를 레퍼런스타입으로 받고, 이후에 r은 호출될때마다 직접적으로 a.. 2023. 2. 10.
[C++] 함수 포인터 함수 포인터 함수의 주소값을 받아 변수처럼 파라미터에 활용하는 방법이다. 함수타입 (*변수명)(파라미터 타입) 순으로 작성하면 된다. 자세한건 밑의 예제를 보자. #include int Add(int a, int b) { return a + b; } void AddPrint(int a, int b, int (*Addfunc)(int, int)) { int sum; sum = Addfunc(a, b); printf("합은 : %d\n", sum); } void main() { int (*pFunc)(int, int) = Add; int sum = pFunc(1, 2); printf("sum: %d\n", sum); AddPrint(2, 3, Add); AddPrint(3, 4, pFunc); } 함수를 변.. 2023. 2. 8.
[C++] 상수(const)와 포인터 상수 (const) 변수와 대조적으로 변하지 않는 수. 상수선언은 const를 붙여서 선언해 준다. const int a = 1; 일반적인 방법으로 상수를 변경할 수 없다. #include void main() { const int a = 1; a = 2; } 상수를 변경하려 하면 문법적 오류가 뜨며 컴파일아 안되는 것을 확인할 수 있다. 하지만 포인터로 접근하게 되면 상수로 선언된 값도 변경이 가능하다. #include void main() { const int a = 1; int* p = (int*)&a; *p = 2; printf("%d", a); } 상수의 값을 변경하지만 실행이 된것을 확인할 수 있다. 하지만 출력값이 변하지 않았다. 이는 내부적으로 프로그램이 메모리를 직접참조하지 않고 상수라 .. 2023. 2. 8.
반응형