일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Docker
- C++ gui 라이브러리
- JUCE 튜토리얼
- vim-go
- go channel
- 연결리스트
- Nebula
- JUCE library
- C언어
- C++ library
- C++
- C++ gui
- 백준
- BOJ
- go
- 운영체제
- tour of go
- LOB
- 코딩
- 알고리즘
- 프로그래밍
- gui
- 자료구조
- JUCE라이브러리
- OS
- 리듬게임
- c++ heap
- a tour of go
- 공룡책
- JUCE
- Today
- Total
목록CafeM0ca (266)
CafeM0ca
이 규칙들은 C++에서 지켜야하는 것들이다. https://en.cppreference.com/w/cpp/language/rule_of_three Rule of Three소멸자, 이동 생성자, 이동 복사 연산자를 정의해두자. Rule of Five소멸자, 이동 생성자, 복사 생성자, 이동 대입 연산자, 복사 대입 연산자 다섯 가지 특수 멤버 함수들을 구현해놓자. Rule of Zero소멸자, 이동 생성자, 복사 생성자, 이동 대입 연산자, 복사 대입 연산자 다섯 가지 특수 멤버 함수들을 필요로 하지 않도록 디자인 하는 것이다.기본적인 방법으로는 구식 스타일의 메모리 할당을 피하는 것이다.A클래스를 2차원 배열로 동적할당 하기 위해 A**으로 선언하지 말고 vector 이런식으로 사용하자. vector는 ..
hyu를 진행하던중 맵라인 위에 노트가 그려져야하는데 맵은 덮어져서 노트만 보이는 상황이 생겼다. (이전 게시글 참고)무엇이 문제인지 고민하다가 혹시(?)하고 짐승적인 감으로 생성순서를 바꿔주었다. before)Map map;NoteManager noteManager; after)NoteManager noteManager;Map map; 결과는 원하던 대로 잘 작동하였다.먼저 선언된 컴포넌트 순서대로 레이어가 깔리는 형식이라 그랬던 것이다.
기존에는 노트 생성과정을 30개마다 만들고 지우고를 update함수에서 반복하였는데 이번에는 Note클래스와 NoteManager클래스를 만들고 deque에 Note를 담아서 처리하는 방식을 채택하였다. 너무 비효율적이라 처음부터 끝까지 다 갈아엎었다. 남은건 딥러닝 생성 알고리즘을 구현하여 위치 선정과 일정 시간마다 노트를 생성하면 된다.
유니폼 초기화는 narrowing(축소변환)을 방지할때 사용한다. class A{ int num; public:A(int i) : num(i) {}A() : A{1} // 생성자 유니폼초기화}; int main() { A a{3.14}; // 컴파일 경고! A aa{3}; // 정상 int * arr = new int[4]{1,2,3,4}; // 동적할당에서 활용가능}
들어가는 시점만 알면 된다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include #include using namespace std;int arr[51][51] {0};int t,m,n,k;int cnt;void search(int x,int y){ if(arr[y][x]){ arr[y][x] = 0; if(x > 0) search(x-1,y); if(x 0) search(x,y-1); if(y > t; for(int a = 0; a > m >> n >> k; for(int i = 0; i > x >> y; arr[y][x] = 1; } for(int i =0; i
컴포넌트의 getWidth()와 getHeight()는 생성자에서 결정되지 않는다. 왜냐하면 자식 컴포넌트는 부모 컴포넌트의 크기를 모른다.생성자의 순서를 보면 자식컴포넌트부터 초기화 되기 때문이다.따라서 resize함수에서 범위를 설정해주는게 현명한것이다.
상수표현식. 상수값이 요구되는 곳에 상수 표현식을 사용한다. 다음 코드는 C++에서 오류로 처리된다. const를 constexpr로 바꿔주면 컴파일 오류가 발생하지 않는다. constexpr은 const와 마찬가지로 컴파일 타임에 계산된다.constexpr을 사용하면 컴파일러가 최적화를 훨씬 효과적으로 할 수 있다. 단, 함수를 constexpr로 선언하려면 다음과 같이 꽤 많은 제약 사항을 지키자.- 함수의 본체는 한 개의 리턴문으로 만들어져야하고 goto문이나 try/catch 블록이 포함되면 안되며 예외를 발생시켜도 안된다. 단, 다른 constexpr을 호출하는것은 허용된다.- constexpr으로 선언하려는 대상이 클래스의 멤버 함수일 경우 그 메서드는 virtual로 선언될 수 없다.- 모든..
C++에는 우측값이라는 개념이 존재한다. 우측값? 좌측값? int main() { int a = 1; // a는 좌측값 1은 우측값 int& ref = a; // ref는 좌측값 a도 우측값이면서 좌측값 return 0;} 위 코드에서 a는 왼쪽에 있어서 좌측값이다. 1은 오른쪽에 있어서 우측값이다.다음줄에 ref는 왼쪽에 있어서 좌측값이다. a는 오른쪽에서 있어서 우측값이지만 a = 1을 통해 동시에 좌측값이다.따라서 a는 우측값이면서 좌측값이다.그럼 1 = a;를 생각해보자. 컴파일에러가 뜬다.1은 우측값이며 좌측값이 아니다. 위 내용을 토대로 다음과 같은 명제가 성립한다.모든 좌측값은 동시에 우측값이지만 모든 우측값은 좌측값이 아니다. 그럼 '무엇이 우측값인가?'에 대한 질문에 대한 답변은 '임시 ..
후배가 추천해줘서 JUCE 연습용으로 만들었다. https://github.com/jinykim0x80/Tic-Tac-Toe 게임이 종료되면 재시작이나 나머지 버튼 클릭 비활성화 처리는 안되어있는데 나중에 처리해야겠다.