일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- virtual inheritance
- virtual function
- suffix return type
- conversion constructor
- operator overloading
- increment operator
- c++ basic practice
- constructor
- 더 지니어스 양면포커
- std::endl
- std::cout
- c++ multi chatting room
- vector capacity
- dynamic_cast
- return by reference
- discord bot
- diamond inheritance
- std::vector
- member function pointer
- new&delete
- base from member
- placement new
- virtual destructor
- delete function
- this call
- pointer to member data
- C++
- virtual function table
- std::ostream
- vector size
- Today
- Total
목록2024/09 (35)
I'm FanJae.
1. this call 1-1. 멤버 함수의 의문점.class Point{ int x{0}; int y{0};public: void set(int a, int b) { x = a; y = b; }};int main(){ Point pt1; Point pt2; pt1.set(10, 20); pt2.set(10, 20);}- 멤버 데이터는 객체당 한 개씩 생성된다.- 멤버 함수는 코드 메모리에 한 개만 만들어져 있다. - 객체가 여러 개 생성되어도 멤버 함수는 한 개만 있다.※ 함수 인자는 2개 (a, b) 밖에 없는데, x가 어떤 객체의 멤버 인지(pt1.x인지 pt2.x 인지) 어떻게 아는가? 1-2. 어떤 변환이 일어나는가?clas..
1. 컴퓨터 구조의 접근 방법 1-1. 컴퓨터를 디자인 하자- 여기서 디자인할 요소는 CPU를 의미한다.- 실제로 존재하는 컴퓨터를 디자인 하는게 아닌 가상의 컴퓨터를 디자인 한다고 생각해보자.- 일반적으로 컴퓨터(CPU) 디자인은 레지스터와 명령어에 대한 디자인이다.- CPU를 디자인 하기 위해서는 H/W Logic 전문가, Algorithm 전문가, Interface 전문가, 컴퓨터 구조의 특성을 고려할 수 있는 프로그램 전문가 등이 참여한다. 명령어 : 프로그래밍 언어로 프로그래밍한 것을 컴파일 했을때 번역되어 나오는 명령어들의 집합명령어의 구성에 따라서 레지스터 셋이 결정되서 레지스터 셋이 나와야 H/W 구성이 나올 수 있다. 1-2. 레지스터 디자인의 핵심① 레지스터를 몇 비트로 구성할 것인가?..
※ 초기 결제 정보를 설정하는 부분은 임의 생략하였다.※ 구글 클라우드 플랫폼 관련 키워드를 검색하면 어렵지 않게 찾을 수 있다. 1. 호스팅이란?- 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 해주는 서비스를 의미한다. 1-1. GCP(Google Cloud Platform)- 구글에서 제공하는 클라우드 컴퓨팅 플랫폼이다.- 자체적으로 여러 가지 컴퓨팅 환경을 제공하고 있지만, 현재 내가 사용하는 디스코드 봇은 사용자가 많지 않다.- 호스팅을 하지 않는다면, 서버를 위해서 매번 전원을 켜둬야한다. - 따라서, GCP가 제공하는 무료 등급을 사용해서 디스코드 봇을 올려두고 사용하려고 한다. 1-2. 무료 티어 확인 1-3. 새 VM 인스턴스 생성- 다음과 같이 설정한다.- 부팅 디스크는 Wi..
1. Trivial 1-1. Special Member Function- 사용자가 제공하지 않으면 컴파일러가 제공하는 멤버 함수가 존재한다.① 디폴트 생성자(Default Constructor)② 소멸자(Destructor)③ 복사 생성자(Copy Constructor)④ 복사 대입연산자(Copy Assignment)⑤ 이동 생성자(Move Constructor)⑥ 이동 대입연산자(Move Assignment) ※ 보통 이러한 멤버 함수들을 Trivial 하다고 한다.2. Trivial Default Constructor※ 예제가 아주 많아서 check 함수는 한번만 보이고, 이후 부터는 임의 생략한다.① The constructor is not user-provided② T has no virtual ..
1. 기존 구현했던 Draft Logic의 문제점- 기존 Draft Logic을 생각해보면 아래와 같은 문제가 있다. ① 한 팀의 추첨을 위해 설계되었다.- 이 프로클럽이라는 모드는 보통 2팀(22인)이서 게임을 한다.- 이 드래프트는 최대 1팀에서 최대 8팀 정도까지도 사용이 가능해야 한다. (필요에 따라서는 그 이상도 가능할 것이다.)- 이에 따라서 봇을 재설계 하기로 했다. ② 기존 코드의 재사용이 어렵다.- 기존 로직은 여러 팀으로 나눠서 하기에는 코드가 복잡해질 여지가 높았다.- 이에 따라서, 로직을 아예 새롭게 구성하기로 하였다. 2. 개선 방향 2-1. 삭제 사항① pick_and_remove() 삭제def pick_and_remove(player_list, count): logging..
1. Template Method Pattern의 정의 오퍼레이션에는 알고리즘의 처리 과정만을 정의하고 각 단계에서 수행할 구체적인 처리는 서브클래스에서 정의한다. Template Method 패턴은 "알고리즘 처리과정은 변경하지 않고 알고리즘 각 단계의 처리를 서브클래스에서 재정의" 할 수 있게 한다. 1-1. 예제를 통한 Template Method Pattern의 필요성 이해 (코드의 중복)#include #include "Painter.h"class Shape{public: virtual ~Shape() {} virtual void draw() = 0;};class Rect : public Shape{public: void draw() override { std::cout..
1. new와 delete 1-1. new와 delete의 원리#include class Point{ int x, y;public: Point(int a, int b) : x{a}, y{b} { std::cout Point* p1 = new Point(1,2);- 위와 같이 쓰면 크게 2가지 작업을 진행한다. 즉, new를 실행하면 아래와 같은 2가지가 실행되는 것이다. ① 메모리할당 void *p = operator new(sizeof(Point))② 생성자호출 Point *p1 = new(p) Point(1,2);- 여기서 new(p) Point(1,2); 와 같은 표기법을 placement new라고 한다. delete p1;- 위와 같이 쓰면 크게 2가지 작업을 진행한다. 즉, delet..
1. Chapter 13 템플릿(Template) 1 1-1. 함수 템플릿의 정의① 인자로 전달되는 두 변수에 저장된 값을 서로 교환하는 SwapData라는 이름의 함수를 템플릿으로 정의해보자. - 그리고 다음 Point 클래스를 대상으로 값의 교환이 이뤄짐을 확인할 수 있도록 main 함수를 구성해보자.class Point{private: int xpos, ypos;public: Point(int x = 0, int y = 0) :xpos(x), ypos(y) { } void ShowPosition() const { cout #include template void SwapData(T& value, T..
1. 변환 연산자와 변환 생성자 1-1. 변환 연산자#include class Int32;{ int value;public: Int32() : value(0) { } operator int() const { return value; }};int main(){ int pn; // primitive type Int32 un; // user type pn = un; // un.operator int() un = pn; // pn.operator Int32() 이는 불가능 // 1. un.operator=(pn) // 2. Int32(pn)}- 객체가 다른 타입으로 변환 될 때 호출되는 함수이다. operator TYPE(){..
1. Chatper 11. 연산자 오버로딩 II 1-1. 깊은 복사를 하는 대입 연산자의 정의① Chapter 07에서는 예제 HASComposite.cpp를 통해서 다음의 두 클래스를 정의하였다.class Gun{ ....}class Police{private: int handcuffs; //소유한 수갑의 수 Gun *pistol; //소유하고 있는 권총public: ....}- 이에 Police 클래스를 대상으로 깊은 복사가 이뤄지도록 대입 연산자와 복사 생성자를 동시에 정의하고 이의 확인을 위해 main 함수도 적절히 정의해보자.#include #include class Gun{private: int bullet; // 장전된 총알의 수pub..