일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- C언어 포인터
- 포인터
- jupyter lab
- c# 추상 클래스
- HTML
- c# winform
- Houdini
- Algorithm
- jupyter
- c#
- 도커
- C++
- c# 윈폼
- git
- Data Structure
- docker
- vim
- gitlab
- 플러터
- Unity
- C# delegate
- Flutter
- dart 언어
- 깃
- 다트 언어
- c언어
- 유니티
- Python
- 구조체
- github
- Today
- Total
목록Programming/C++ (52)
nomad-programmer
클래스 템플릿의 정의방법은 함수 템플릿의 정의방법과 동일하다. #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; template class Point { private: T xpos, ypos; public: explicit Point(const T x = 0, const T y = 0) : xpos(x), ypos(y) {} void ShowPosition() const { cout
함수 템플릿과 템플릿 함수 다음의 정의를 가리켜 '함수 템플릿(Function Template)' 이라 한다. template T Add(T num1, T num2) { return num1 + num2; } 반면 위의 템플릿을 기반으로 컴파일러가 만들어 내는 다음 유형의 함수들을 가리켜 '템플릿 함수(Template Function)' 이라 한다. int Add(int a, int b) { return num1 + num2; } double Add(double num1, double num2) { return num1 + num2; } 템플릿 함수의 표시에서 와 은 일반함수가 아닌, 컴파일러가 만들어낸 템플릿 기반의 함수임을 표시한 것이다. 함수 템플릿 함수를 만드는데 사용되는 템플릿 템플릿 함수 템플..
C++ 표준 라이브러리에는 string이라는 이름의 클래스가 정의되어 있다. 해당 클래스는 문자열의 처리를 목적으로 정의된 클래스이며, 이 클래스의 사용을 위해서는 헤더파일 을 포함해야 한다. #include #include usging namespace std; int main(void) { string str1 = "C++ "; string str2 = "Language Love"; string str3 = str1 + str2; cout
C++에서는 객체간의 대입연산을 허용한다. 당연하게도 두 객체의 자료형이 일치할 때에만 대입연산이 가능하다. #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class Number { private: int num; public: Number(int n = 0) : num(n) { cout
함수 호출에 사용되는 인자의 전달에 사용되는 ( )도 연산자이므로 오버로딩이 가능하다. 그리고 이 연산자를 오버로딩 하면, 객체를 함수처럼 사용할 수 있게 된다. adder(5, 7); 객체의 이름이 adder이고 이 객체에 ( )연산자가 멤버함수로 오버로딩 되어 있는 상태라면, 다음과 같이 해석된다. adder.operator()(5, 7); 연산자가 ( )이니 멤버함수의 이름은 operator()이다. 그리고 함수에 전달되는 인자의 정보는 5와 7이다. #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class Point { private: int xpos, ypos; public: exp..
스마트 포인터란 말 그대로 똑똑한 포인터이다. 그리고 스마트 포인터는 객체이다. 포인터의 역할을 하는 객체를 뜻한다. #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class Point { private: int xpos, ypos; public: explicit Point(const int x = 0, const int y = 0) : xpos(x), ypos(y) { cout
new와 delete도 연산자이기 때문에 오버로딩이 가능하다. new 연산자 기본적으로 제공되는 new 연산자가 하는 일은 다음과 같다. 메모리 공간의 할당 생성자의 호출 할당하고자 하는 자료형에 맞게 반환된 주소 값의 형 변환 이 중 세 번째 내용은 C언어에서 사용하면 malloc함수와 달리, new 연산자가 반환하는 주소 값을 형 변환할 필요가 없음을 의미한다. new 연산자의 오버로딩은 1번에 해당하는 메모리 공간의 할당만 오버로딩할 수 있다. 나머지 두 가지 작업은 C++ 컴파일러에 의해 진행이 되며, 오버로딩할 수 있는 대상도 아니다. new 연산자 오버로딩은 다음과 같이 오버로딩 하도록 이미 약속이 되어있다. void* operator new(size_t size) { ... } 반환형은 반드..
#include #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class BoundCheckIntArray { private: int* arr; int arrlen; explicit BoundCheckIntArray(const BoundCheckIntArray& ref) {} BoundCheckIntArray& operator=(const BoundCheckIntArray& ref) {} public: explicit BoundCheckIntArray(int len) : arrlen(len) { arr = new int[len]; } ~BoundCheckIntArray() { delete[]..
함수 호출관계 모호함은 다음과 같은 상황에서도 발생할 수 있다. #include #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class Base { public: explicit Base() { cout
가상함수의 동작원리를 이해하면, C++이 C보다 느린 이유를 조금이나마 알 수 있다. 다음의 예를 살펴보자. #include #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class AAA { private: int num1; public: virtual void Func1() { cout
가상함수 말고도 virtual 키워드를 붙여줘야 할 대상이 하나 더 있다. 그것은 바로 '소멸자'이다. 즉, virtual 선언은 소멸자에도 올 수 있다. 가상 소멸자(Virtual Destructor) virtual로 선언된 소멸자를 가리켜 '가상 소멸자'라 부른다. 다음의 예를 살펴보자. #include #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class First { private: char* strOne; public: explicit First(const char* str) { cout
함수를 override 했다는 것은, 해당 객체에서 호출되어야 하는 함수를 바꾼다는 의미이다. 하지만 포인터 변수의 자료형에 따라 호출되는 함수 종류가 달라지는 것은 문제가 있다. 다음의 예제를 보자. #include #pragma warning(disable: 4996) using std::cout; using std::cin; using std::endl; class First { public: void MyFunc() { cout