일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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++
- tour of go
- 연결리스트
- Docker
- JUCE라이브러리
- OS
- BOJ
- JUCE 튜토리얼
- C++ library
- c++ heap
- 운영체제
- 공룡책
- go
- C++ gui 라이브러리
- 프로그래밍
- gui
- a tour of go
- C++ gui
- 리듬게임
- 자료구조
- LOB
- 알고리즘
- JUCE library
- C언어
- Nebula
- go channel
- vim-go
- JUCE
- 백준
- Today
- Total
목록CafeM0ca (266)
CafeM0ca
재밌는 영상을 봐서 정리해본다. reverse OOP- .h와 .cpp파일을 나눠쓰는 C++의 특성을 이용하여 상속관계에서 발생하는 virtual함수의 단점을 없앤다. 주로 게임엔진에서 씀. 위 영상을 보고 적당한 예시를 생각해보았다. 멀티플랫폼을 대상으로 작업해본게 없어서 적당한지는 모르겠지만 아무튼. 예를 들어 어떤 멀티플랫폼용 프로그램에서 간단하게 콘솔화면을 정리해주는 함수를 사용하게 되었다고 가정하자.윈도우에서는 system("cls") 를 사용하고 리눅스에서는 system("clear") 를 사용한다.환경에 맞춰서 제공해주기 위해 다음과 같이 상속했다. 일반적으로 자식 클래스들은 플랫폼 입맛에 맞게 consoleclean() 가상함수를 오버라이딩 할 것이다. (그러나 우리는 가상함수가 느리다는 ..
virtual 키워드는 클래스간 상속에서 자식 클래스가 부모 클래스의 함수를 오버라이딩 특성을 제어하고자 할 때 사용한다. 묻따말 코드부터 보자 출력결과부모 클래스로 Super가 있고 자식 클래스로 Sub은 public으로 Super를 상속하는데잠시 삼천포로 빠져 접근지시자에 대한 설명을 하자면public으로 상속받으면 Super에 public멤버에 접근 가능하다. 나머지는 다 privateprivate 부모 클래스의 public,protected,private가 private로 바뀜 protected 부모 클래스의 private,protected가 private로 바뀜 public 부모클래스의 private가 private로 바뀜 즉 public으로 상속받으면 protected까지 접근 가능하다는 이야..
해야할게 정말 많구나.. - 숨마,라이트쌘 미적분1 끝내기 - 함수의 연속 어렵다.. 개념이 안잡힌듯 - Hello New World 해커톤 본선가기 - 떨어짐- 주니어 소프트웨어 창작 경진대회 신청 - 떨어짐 - hyu 개발 진행 - 싱글플레이는 됐다. 점수판이없긴함 - FC4 클리어 - 해킹할 때가 아니다. 중단.- 플라스크 공부 및 서울시 앱 공모전에 제출할 앱 개발 이어시작 - 하차했다. - 전문가를 위한 C++ 읽기 (현재 약 400페이지) - 무난하게 읽는 중 멀티코어 OS도 공부해야하는데 미치겠다.그거 하루종일 방학때 잡고해도 다 못하는 분량인데 ㅋㅋㅋㅋㅋㅋㅋㅋ 3000쪽... 쓰신 작가양반도 대단하다..2학기 수업준비를 위해 OS를 조금 미뤄야겠다. + Crypto on the Beach ..
pimpl은 매번 인터페이스와 구현 클래스를 만든다.구현 클래스는 원래 만들던 방식의 클래스랑 같다.인터페이스 클래스는 구현 클래스의 public 메서드만 담는다.인터페이스 클래스의 메서드들은 단순히 구현 클래스의 메서드 호출을 중계하는 역할을 한다.인터페이스 클래스는 단 하나의 데이터 멤버로 구현 클래스의 포인터를 가진다. 이렇게 클래스를 분리하면 구현 클래스가 어떻게 바뀌든 public 인터페이스 클래스에는 변화가 없으므로 컴파일을 다시 해야 할 필요를 줄일 수 있다.즉, 구현 부분이 어떻게 바뀌든 인터페이스만 그대로라면 사용자로서는 컴파일을 다시 할 필요가 없다.컴파일 종속성의 배제는 구현 클래스의 객체를 인터페이스 클래스가 포인터로 가질 때만 유효하다. 이러한 테크닉은 인터페이스와 구현을 완전히 ..
이름부터 귀여운 댕글링 포인터(dangling pointer)는 내면을 파해쳐보면 전혀 귀엽지 않다. 다음과 같은 코드가 있다고 가정하자. n을 동적할당해서 1을 가리키게한다.p는 n이 동적할당한 값 1을 가리키게한다. n은 역할을 다 하고 동적할당을 해제하고 안전하게 nullptr로 만들어 주었다.ㄴ그러나 ptr은 여전히 n이 '가르켰던' 값을 가리키고 있다. 해제된 메모리를 가리키고 있는셈. 출력결과 Use After Free(UAF) 취약점이 발생한다.
처default와 delete는 각각 switch case구문과 new의 짝궁으로 사용되었다. C++은 오버로딩 기능이 있다보니 생성자를 여러개 만들 수 있다.그 중에서도 default 생성자가 있는데 흔히 클래스이름() { } 처럼 생겼다. 디폴트 생성자임을 명시해주기 위해서 다음과 같이도 사용한다. 그리고 디폴트 생성자에 delete 키워드를 사용하면 클래스이름 변수이름; 처럼 사용이 불가능해진다.(디폴트 생성자가 호출되지 않기 때문) \main 함수의 a가 컴파일 에러를 보여주고 있다. default와 delete는 디폴트 복사 생성자와 디폴트 대입 연산자에서도 사용 가능하다.다음과 같은 코드가 있을 때, 실행결과각각의 클래스 변수들의 주소는 제각각이지만 값들은 똑같다.a1은 디폴트 대입 연산자로 ..
this 포인터는 C++에서 클래스 내부에서 사용하는 포인터다. ‘this’ pointer is a constant pointer that holds the memory address of the current object. - this 포인터는 현재 객체의 메모리 주소를 갖고 있는 const 포인터다.‘this’ pointer is not available in static member functions as static member functions can be called without any object (with class name). - this 포인터는 static 멤버함수에서 사용할 수 없는데 static 멤버 함수는 어느 객체에서나 호출 될 수 있기 때문이다.+ static 멤버함수는 클..
smart pointer automatically managing memory a pointer . if out of scope range, It deleted. There are three types pointer in std namespace. - unique_ptr- shared_ptr- weak_ptr First unique_ptr code. 12345678910111213#include #include int main(){ // unique ptr std::unique_ptr ch = std::make_unique('c'); auto a = std::make_unique(1); std::cout
학교에서 강제로 자바프로젝트 당했다. 모카는 '자바'들어간 어떠한것든 싫어한다.. (ex : 자바스크립트, 자바 .. 등) 그래서 간단하게 할 수 있던것을 찾던 중 웹프로그래밍 프로젝트때 복수의 이미지의 속성을 열람해야할 일이 생겼다. 여기서 영감을 얻어 FileAttributesView를 생각했다. 시작하면은 심플하다. 현재 운영체제를 보여주고 프로그램이 지원하는 운영체제인지 알려준다. 확인하고싶은 파일(또는 디렉토리)의 경로를 입력한다. 두번째로 파일(또는 디렉토리)의 이름을 입력하면 크기와 생성일, 접근일 등 정보를 확인할 수 있다. https://github.com/jinykim0x80/SimpleFileAttributesViewer
12345678910111213141516171819202122232425262728293031323334353637#include #include #include class EvenSequence{ public: EvenSequence(std::initializer_list args) { if(args.size() % 2 != 0){ throw std::invalid_argument("initializer_list should " "contain even number of elements"); } mSequence.reserve(args.size()); for(auto value : args) { mSequence.push_back(value); } } void dump() const { for(aut..