C++ static (Class)
·
C++/Class
static 정적 멤버 변수 (Static Member Variable) 정적 멤버 함수 (Static Member Function)
C++ 체이닝(Chaining)
·
C++/Class
체이닝(Chaining) 함수의 반환 값을 해당 인스턴스의 레퍼런스로 전달하여, 연속해서 함수를 사용할 수 있도록 하는 기법이다. 아래와 같이 함수를 하나씩 작성하면 귀찮다. #include class Calc { int value_; public: Calc(const int &value_in) : value_{value_in} {} void add(int value) { value_ += value; } void sub(int value) { value_ -= value; } void mul(int value) { value_ *= value; } void print() { std::cout
C++ this
·
C++/Class
this 인스턴스 객체의 주소를 가리킨다. 예제 #include class Simple { int id_; public: Simple(const int& id_in) { setID(id_in); std::cout
C++ 소멸자 (Destructor)
·
C++/Class
소멸자 (Destructor) 인스턴스가 메모리에서 해제될 때 내부에서 호출되는 함수 메모리 누수를 방지할 때 필수적이다. #include class Simple { int num_; public: Simple(const int& num_in) : num_{num_in} { std::cout
C++ 변환 생성자(Converting Constructor)
·
C++/Class
변환 생성자(Converting Constructor) explicit 키워드가 없는 생성자는 묵시적으로 형변환을 허용한다. 변환이 가능한 경우는 해당 인자를 생성자에 인자로 주었을 때 유효한 경우이다. #include #include class Fraction { int numerator_; int denominator_; public: Fraction(int num = 0, int den = 1) : numerator_(num), denominator_(den) { std::cout
C++ delete
·
C++/Syntax
delete 함수를 사용하지 못하도록 막는 역할을 하는 키워드이다. #include #include class Fraction { int numerator_; int denominator_; public: Fraction(char) = delete; explicit Fraction(int num = 0, int den = 1) : numerator_(num), denominator_(den) { std::cout
C++ 깊은 복사(Deep Copy)
·
C++/Syntax
깊은 복사(Deep Copy) 하위 항목을 모두 복사하는 것 #include #include class MyString { char* data_ = nullptr; int len_ = 0; public: MyString(const char* source = "") { assert(source); len_ = std::strlen(source) + 1; data_ = new char[len_]; for (int i = 0; i < len_; ++i) data_[i] = source[i]; data_[len_ - 1] = &#39;\0&#39;; } ~MyString() { delete[] data_; } MyString(const MyString& source) { std::cout
C++ 얕은 복사(Shallow Copy)
·
C++/Syntax
얕은 복사(Shallow Copy) 얕은 복사는 허상 포인터(Dangling pointer) 문제를 일으킬 수 있다. #include #include class MyString { char* data_ = nullptr; int len_ = 0; public: MyString(const char* source = "") { assert(source); len_ = std::strlen(source) + 1; data_ = new char[len_]; for (int i = 0; i < len_; ++i) data_[i] = source[i]; data_[len_ - 1] = &#39;\0&#39;; } ~MyString() { delete[] data_; } char*& getString() { retu..
라즈베리파이 부팅 시 자동 실행
·
Raspberrypi
라즈베리파이 부팅 시 자동 실행 rc.local, .bashrc, init.d, systemd 등의 방법이 있지만 crontab이 가장 간편하다. crontab 자동 실행하고 싶은 명령어를 정리해서 쉘 스크립트로 작성한다. 다음 명령어를 입력한다. sudo crontab -e 나는 처음 입력하니까 에디터를 선택하라고 했는데, vim basic이 무난할 것 같아서 선택했다. crontab 설정 파일이 에디터로 열렸으면 맨 밑에 다음과 같이 실행하고 싶은 파일을 입력한다. 파일명은 절대경로로 입력해야하는 듯 하다. ... @reboot sudo 파일명.sh 리부팅하면 적용된다. 참고 https://blog.naver.com/emperonics/221770579539