반응형

C , C++, C# 45

[C/C++] iterator (반복자)

STL을 사용하는 프로그래머라면 반복자는 간단하게라도 알고가야한다. 반복자가 어떻게 동작하는지 간단하게 보고가자 보통 vector v 가 있을때, 우리가 begin(), end() 를 사용할 수 있는 이유가 반복자 때문이다. 여기서 간단하게 순환 가능한 반복자를 만들어보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class num_it { int i; public: explicit num_it(int position = 0) : i{ position } {} int operator*() const { return i; } // 반복자(*it)를 참조하면 정수 반환 num_it& operator++() { ++i; return *th..

C , C++, C# 2019.12.11

[C/C++] C++ 17 문법 unpacking(언패킹), 구조체 바인딩

C/C++로 알고리즘 문제를 풀면서 또는 c++ 코드인데 생소한 부분들을 많이 봐왔을 것이다. 그 중에서 문제를 풀때도 많이 사용되는 C++ 17 문법인 '언패킹(Unpacking)'에 대해 간단하게 알아보자. 내용은 간단하다. 다른 언어에서 쓰는 것처럼 '[...]' 를 사용하여 접근할 수 있다. 아래의 코드를 보자. 1 2 3 4 5 6 7 int main() { auto ans = make_pair(1,3); auto [a, b] = make_pair(1,3); //이와 같이 auto [변수이름,..] 으로 사용가능, 단 VS c++ 17 옵션켜야함 cout Colored by Color Scripter 출력결과는 직접 해보거나 계산해도 무방하다. &은 참조연산자로 값을 변경할 수 있다. 이것을 사..

C , C++, C# 2019.12.09

[C/C++] #if #elif #endif 조건부 컴파일

오늘도 코드분석중 #if ... 등에 대한 내용을 보았다. 찾아보니 그리 어려운 내용은 아니었다. 한번 살펴보자 #Elif, #else및 #endif 지시문을 사용 하는 #if 지시문은 소스 파일의 부분에 대 한 컴파일을 제어 합니다. 라고 MS 공식 문서에 나와있다. 즉 컴파일을 할지 안할지 본다는 것이다. #if를 사용했으면 마지막에 #endif를 명시해줘야한다. #if를 사용할때, 비교 대상은 정수 상수여야 하며 실수나 문자열은 매크로와 비교할 수 없다. 정수값을 가지는 다른 매크로와 값을 비교하는 것은 가능하다. defined 연산자로 매크로의 존재 여부를 평가할 수 있다. #if defined(MACRO) 전처리문은 #ifdef MACRO와 완전히 동일한 문장이다. 그러나 다른 조건과 함께 매크..

C , C++, C# 2019.12.04

[C/C++] #define 매크로, #undef, size_t

코드 분석을 하면서 모르는 내용들에 대해 정리하고자 한다. #define 매크로문에 대해 알아보자. 이건 대부분 매크로 상수 라고 해서 변수가 아니지만 어떤 상수값을 정의하여 사용할 수 있다는 것 정도까지는 알고 있을것이다. 대게 #define [이름] [값] 모양으로 사용하고 있을 것이다. 또한, 이것이 함수처럼 인수를 가지도록 #define sum(a,b) (a+b) 이런 형태로 쓰인다는것을 알고있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include using namespace std; int a,b; #define sum(a,b) (a+b) #define Max_val 1000 int main() { a = Max_val + 1; b = sum(a, Max_val); co..

C , C++, C# 2019.12.03

[C/C++] move

C/C++ 코드 분석을 하면서 필요한 부분들을 공부해보고자 한다. 원문은 https://modoocode.com/227 에 잘 정리되어 있다. 모든 내용의 출처는 이곳이다. 원문내용을 보고 내용을 내 방식에 정리한 것이며, 원문의 출처에 자세하게 있다. C언어를 하면서 학부과정에 swap에 대한 방법이 있다. 보통 이 과정에서 객체 메모리가 3번이나 '복사' 된다. 다음 코드와 코드를 실행한 결과이다. 1 2 3 4 5 6 7 template void My_swap(T &a, T&b) { T tmp(a);//a는 lValue 라서 tmp의 복사 생성자가 호출, a가 차지하는 공간 만큼 메모리 할당 후, a의 데이터가 복사됨 //우리는 이것이 복사생성자가 아닌 이동생성자가 되길 원함. 하지만 a는 lVal..

C , C++, C# 2019.11.14

[C/C++] 이동 생성자

C/C++ 코드 분석을 하면서 필요한 부분들을 공부해보고자 한다. 원문은 https://modoocode.com/227 에 잘 정리되어 있다. 모든 내용의 출처는 이곳이다. 원문내용을 보고 내용을 내 방식에 정리한 것이며, 원문의 출처에 자세하게 있다. My.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #pragma once #pragma once class My { char *string_point; // 문자열 데이터 가리키는 포인터 int s_len; // 길이 int memory; // 할당용량 public: My(); My(const char *str); My(const My &str); // 이동생성자 My(My &&str..

C , C++, C# 2019.11.03

[C++] 가상함수 테이블

**면접에서 가상함수가 무엇인지 가상함수 테이블의 생성 등에 대해 묻는 경우가 있다.** 가상함수의 특징은 동적 바인딩으로 컴파일이 아니고 프로그램이 실행, 함수가 호출될 때, 바인딩할 주소가 결정되는것 그렇기에 컴파일은 빠르지만 실행시간이 느릴 수 있다. 동적 바인딩을 위한 주소를 담을 메모리를 미리 만들어 줘야한다. 가상함수 테이블 한 개 이상의 가상함수를 포함하는 클래스에 대해서는 컴파일러가 다음 가상함수 테이블을 만든다. 이것을 V-Table(Virtual Table)이라고도 하는데, 이는 실제 호출되어야 할 함수의 위치정보를 담고 있는 테이블이다. 12345678910111213141516171819202122232425262728293031#include#include#include using..

C , C++, C# 2019.03.12

C++ 가상함수 이해정리

참고 : https://koocci.github.io 가상함수를 하기 전, 다음을 확인하자. int main(){ Base* bptr = new Derived(); //컴파일 ok Derived* dptr = bptr; //컴파일 에러 ... Derived* dptr = new Derived(); // 컴파일 ok Base* bptr = dptr; // 컴파일 ok}// Base는 부모 클래스, Derived는 자식 클래스Derived 클래스는 Base 클래스의 유도 클래스이므로 Base 클래스의 포인터 변수로 Derived 객체의 참조가 가능하고 문제 없이 컴파일이 가능하다. 그러나 bptr은 Base형 포인터이므로 bptr이 가리키는 대상은 Base 객체일 수도 있는 것이다. 그럴 경우, Derive..

C , C++, C# 2019.03.06

C++ 함수 오버라이딩 간단정리

참고 : https://koocci.github.io/ 다형성과 상속은 아주 중요한 개념이다. 항상 머리속으로 생각하고 있어야 한다. 이와 함께 C++ 함수 오버라이딩에 관해 알아보자. 알아보기전에, 보통 C++프로그래머라면 기술시험 및 면접에서 오버로딩(Overloading)과 오버라이딩(Overriding)에 대해 자주 묻는다. 오버로딩(Overloading) : 같은 이름의 함수에 매개변수를 다르게 사용하여 매개변수에 따라 다른 함수가 실행 특징) 메소드 이름이 같다. 리턴형이 같아도 되고 달라도 된다. 파라미터 갯수가 달라야함 파라미터 갯수가 같으면, 자료형이 달라야함 오버라이딩(Overriding) ; 상속받았을때, 부모클래스의 함수를 사용하지 않고 다른 기능을 실행할때, 함수를 자식클래스에 같..

C , C++, C# 2019.03.06

C++ 다형성,상속 간단정리

출처 : https://koocci.github.io/c++/2016/11/17/C++_16.html 상속 - 부모꺼를 자식이 물려받음 -> 자식은 자식꺼 + 부모꺼 사용가능 자식 클래스의 생성자는 자신이 상속한 부모클래스의 맴버를 초기화해야함 -> 부모클래스를 호출하는 방식으로(이니셜라이져사용)*자식 클래스 객체생성과정은 부모클래스를 무조건 호출!! 명시하지 않으면 부모클래스의 void 생성자 호출 자식 클래스 객체가 소멸될 떄, 자식 클래스 소멸자 실행 후 부모클래스 소멸자 실행 접근 제한자에서의 상속은 해당 접근 제한자보다 넓은 것들을 지정한 걸로 바꿈Ex) Class 자식 : private 부모 -> private보다 넓은 맴버는 private로변경 -> 다른 클래스가 솔찍히 접근할 수 없다. (..

C , C++, C# 2019.02.26
반응형