post-thumbnail

C++ study(11)

class의 상속성 상속성(inheritance) 은 객체 지향 프로그램에서 굉장히 중요한 특징이다!! 어떤 class A가 있을 때, A로부터 상속을 받은 class B가 있다면 B를 자식 class, A를 부모 class라고 부른다. B는 A가 가지고 있는 멤버를 모두 가지고 있다. 간단한 예제 상속을 받으면 부모 class의 멤버를 갖게 되지만, 완전히 모든 멤버를 다 가지는 건 아니다. 상속되지 않는 것으로는 '생성자', '소멸자', '대입 연산자', '복사 생성자' 네 가지가 있다. 생성자의 경우 class에 대해 하나 이상 만들지 않으면 자동으로 기본 생성자가 생성된다. 부모 class에는 생성자가 정의되었어도 자식 class에는 정의된 생성자가 없다면 자식 class에서는 자동으로 기본 생성자가 정의된다. 자식 class의 생성자는 반드시 부모 class의 생성자를 반드시 하나 부른다. e.g. 결과로는 둘 모두

2023년 2월 3일
·
0개의 댓글
·
post-thumbnail

Algorithm(1)

2309 일곱 난쟁이 9개의 난쟁이 키가 주어지고 모두 100이 넘지 않는 자연수이다. 합이 100이 되게 하는 7개의 난쟁이 키를 찾아야 한다. 단, 합이 100이 되지 않는 경우는 없으며 정답이 여러가지이면 그 중 아무거나 출력한다. 결과는 오름차순으로 일곱 난쟁이의 키를 출력한다. 먼저 9개의 난쟁이 키를 sorting하고, 합이 100이 되는 7개를 찾는데, 계산을 줄이기 위해 전체 9명의 키에서 빼면 100이 되는 둘의 키를 찾아 제외했다. 1018 체스판 다시 칠하기 MN보드를 잘라 88크기 체스판으로 만드는데, 체스판을 잘라낸 후 몇개의 정사각형은 다시 칠해 변을 공유하는 두개 사각형은 항상 다른 색으로 칠해져 잇게 한다. 칠해야 하는 정사각형의 최소 개수를 구해야 한다. 자를 수 있는 모든 8*8에 대해 검은색으로 시작하는 체스판과 비교한 후, 가장 차이가 작은 값을 찾겠다. 다만, 흰색으로 시작하는 체스판의 경우는 검은색과 완전히 반대

2023년 2월 2일
·
0개의 댓글
·
post-thumbnail

Makefile & make: c/cpp 빌드 시스템

make와 Makefile 우리는 source code를 짜고, compile한 후, 실행한다. 이때 compile이란 특정 프로그래밍 언어로 쓰인 code를 다른 언어로 옮기는 과정이다. 즉, compiler가 작용하면 비교적 사람이 이해하기 쉬운 high-level언어로 쓰인 source code 내용을 컴퓨터가 읽을 수 있는 low-level 어셈블리어로 번역해준다. compiler로 직접 compile하는 과정을 거치기도 하지만, 나의 경우 linux를 사용한다면 terminal에서 ' _ 'make' _라는 명령어를 사용해 쉽게 build 하고 실행하는 방법을 주로 사용한다. 그렇다면 _ 'make' _라는 명령어가 정확히 어떤 역할을 해주는 것일까??? 라는 의문을 가지고 살펴보겠다. Makefile : 프로그램을 관리하는 프로그램이다. 특정 프로그램의 일정 부분이 수정돼 재 컴파일이 필요할 경우 이를 용이하게

2023년 2월 2일
·
0개의 댓글
·

C++ study(10)

다차원 배열 동적 할당 C에서와 같이, int형 2차원 배열이라면 int*형 1차원 배열로 취급한 뒤 각 칸의 값이 int형 배열의 시작 주소인 포인터 배열로 보기로 했다. example code 행(m),열(n) 수를 입력받아 그 크기의 2차원 배열을 만들고, 제일 왼쪽 위 칸부터 1~m*n까지 자연수를 하나씩 넣었다. 동적 메모리 할당 바깥쪽 배열을 int형 배열로 생각하므로, 행 수 m개인 자료형이 'int ' 인 크기 'm'인 배열을 동적할당한다. 안쪽에서는 자료형 'int'인 크기 'n'인 배열을 동적 할당한다. 동적 메모리 해제 2중 포인터 arr을 한번만 delete하면 안된다. 자신이 가리키던 int* 형 배열 값만 직접 날리므로, 그 값들이 가리키던 안쪽 배열 값들은 해제되지 않아 memory leaking 발생한다. 따라서 안쪽 int형 배열 먼저 delete 후, 마지

2023년 1월 31일
·
0개의 댓글
·

C++ study(9)

배열의 동적 할당 _ 동적배열dynamic allocating _ 의 주 목적인 크기를 모르는 배열을 동적 할당해 보자! 배열을 할당할 경우, (1차원 배열에서) 받는 것은 그대로 포인터이다. new로 배열 메모리를 할당받을 때, 자료형 뒤에 _ "[크기]" _를 이어서 쓴다. c에서 처럼 byte수로 넘겨야 해 sizeof(int)를 곱하거나 하는 일은 없다. 이미 자료형이 언급되었으므로 "크기"만 주면 된다. delete로 배열 메모리를 해제할 때는 _ "delete[]" _로 쓴다. _ [] _를 붙이면 포인터가 배열을 할당받았으므로 연달아 많은 칸의 메모리를 해제해야 한다는 것을 컴퓨터에 알려주어 이어진 메모리를 한번에 다 해제한다. class와 배열 동적 메모리의 결합! 입력받는 변수 num이 배열의 크기를 결정한다. 이때 배열의 크기를 사용한 메모리의 동적할당을 할 때, _ Student[num] _과 같은 형식

2023년 1월 31일
·
0개의 댓글
·

C++ study(8)

Dynamic Allocating (동적할당) C언어에서는 malloc()과 free()를 써서 동적할당을 한다! C++은 new와 delete를 사용해서 좀 더 간단해졌다! Dynamic Allocating(동적할당) 이란, 프로그램이 실행되는 중에 이루어지는 메모리 할당이다. 코드 안에서 선언된 변수들은 컴파일 도중 메모리를 점유하는 할당이고 이는 프로그램이 실행되기 전에 할당된다. 반면, 동적 할당은 프로그램이 실행되는 도중 메모리를 그때그때 잡는다. 동적 할딩이 필요한 경우는 대체로 크기가 프로그램이 실행되는 중 결정되는 배열, 자료구조가 있을 때 등이다. 변수 단위 동적 할당 'new' 뒤에 자료형을 쓰면 heap이라는 동적 메모리 전용 메모리에서 필요한 만큼 메모리를 확보해 그 주소를 넘겨준다.(동적 할당하는 메모리 타입은 포인터 타입과 같아야 한다.) int형이면 4byte의 메모리를

2023년 1월 30일
·
0개의 댓글
·

오목게임 만들기

_ 오목게임을 구현해 보자 ! _ c++을 사용해 오목 게임을 구현해보고자 한다. 10*10 짜리 격자판에서 B, W 순서대로 돌을 놓는다. 가로, 세로, 대각선 중 어떤 것이든 5개의 연속된 돌을 놓는 사람이 승리한다. 빈 칸은 ' - ' 로 표시한다. 검은색은 'B', 흰색은 'W'이다. B,W 중 누가 이겨 게임이 끝났을 때를 판단할 때, 현재 놓은 돌 위치에서 각각 '\', '/', '|', '-' 방향으로 5개가 이어져있는 위치가 존재하는지 탐색하는 방식으로 판정했다. 작성한 코드는 다음과 같다. [코드 링크]

2023년 1월 28일
·
0개의 댓글
·

C++ study(7)

friend 1.class에 사용 2.함수에 사용 1.class class를 다른 class의 친구로 만든다! = private 멤버에 접근할 수 있게 된다. apple1 object의 weight값이 잘 바뀜을 확인할 수 있다. box가 apple의 friend로 선언되었다고 해서 apple이 box의 private 멤버에 접근할 수 있는 것은 아니다. 2.함수 함수를 friend로 선언하면(특정 class안에서 선언), 그 함수는 멤버함수가 아니어도 그 class의 private 멤버에 자유롭게 접근할 수 있다. setWeight는 멤버함수가 아니어서 Apple::이 없고 매개변수도 apple형 class로 받아야 한다. 단, private멤버에 접근 가능하다.

2023년 1월 26일
·
0개의 댓글
·

C++ study(6)

함수에서 const 사용 매개변수 리스트 안에 있는 const 어떤 매개변수를 const로 만드는 것. const형 변수 선언을 함수의 매개변수에 하는 것과 같다. func() 함수의 매개변수 n을 const로 받으면 함수 내용 안에 n값을 수정할 수 없게 된다! const가 붙은 멤버 함수 >const키워드를 저곳에 붙이면, 이 함수는 멤버 변수의 값을 수정하지 않는다뜻! 실제로 저런 함수에서는 멤버 변수의 값을 수정할 수 없다. -> const형 object에서는 저런 함수들을 부를 수 있어서 필요한 것이다!! 매개변수, 반환형이 const인 경우에도 const키워드를 넣어준 함수를 부를 수 있게 되었다! const 처리된 object에서 setX() 같은 함수는 부를 수 없다.. 정리하면, >1. const처리된 멤버 함수 안에서 역시 자신의 멤버 함수를 부르는 데 제한

2023년 1월 26일
·
0개의 댓글
·

C++ study(5)

overloading 동일한 이름을 가진 함수를 여러 개 선언, 정의하는 것! 동일 이름의 함수 호출했을 대 함수의 이름은 같지만 매개변수 리스트가 다르다! 컴파일러가 인식하는 것은 매개변수 리스트에서 _ 매개변수의 개수 와 자료형 _ 뿐이다. constructor 생성자 >object가 만들어지는 순간 딱 한번 실행되는 함수. 반드시 object가 만들어지는 순간에만 실행! 이미 만들어진 object에 대한 생성자의 임의 호출 불가. 어떤 object 맨 처음 생성됐을 때 할 수 있는 일인 멤버 변수 초기화 등의 역할을 한다! 생성자를 따로 만들지 않으면 자동으로 내용이 없는 기본 생성자가 class에 대해 만들어지고, object를 만들 때 마다 기본생성자가 실행! > 1. 생성자의 이름은 반드시 해당 class의 이름과 동일해야 한다. > 2. 리턴값의 자료형을 쓰면 안된다. > 반드시 public에 선언해야

2023년 1월 26일
·
0개의 댓글
·
post-thumbnail

C++ study(4)

class source code 파일 분할 class가 많아지거나 멤버가 많아지면 소스 코드를 여러 파일로 분할할 필요가 생긴다. >class에 대해 분할! >* header 파일 h확장자 파일과 cpp 확장자 파일로 하나의 class를 분할! h 파일(interface file): class 선언 cpp 파일(implementation file): 멤버 함수 정의 header file >class 선언 implementation file >header file 이름, 확장자 묶어서 include! main file > pairs.h header file을 선언해 준다! class안의 class coord.h coord.cpp pairs.h pairs.cpp main.cpp >* 만약 중복되는 파일이 사용되어 main에서 coord.h가

2023년 1월 23일
·
0개의 댓글
·

C++ study(3)

Private private으로 설정된 멤버는 변수, 함수 모두 class밖에서는 '.' 또는 '->'연산자를 사용해 바로 접근할 수 없다. private 멤버 변수에 바로 접근을 하지 못해 매개체 역할의 멤버 함수가 필요하다. private한 "멤버 함수"를 사용하는 경우, 해당 class 함수 안에서만 반복적으로 쓰일 때 private으로 만든다. inline >함수 선언 시 맨 앞에 써주면 _ "inline function" _ 이 된다. 정의부에는 쓰지 않아야 하며, 선언과 정의를 몰아서 코딩했으면 맨 앞에 한 번 써 주면 된다. 함수의 내용에 영향을 주지는 않고, 컴파일 방식에 영향을 준다. 컴파일 도중 원래 함수를 부르면 매개변수를 가지고 그 함수가 있는 구문을 찾아가야 하는데, inline function은 이를 생략하기 위해 함수 내용을 부른 부분에 그대로 복사붙여넣기 하는 식으로 끼원허어 컴파일 시간

2023년 1월 22일
·
0개의 댓글
·
post-thumbnail

C++ study(2)

Class Class란? 구조체의 확장. 구조체= 여러 변수들을 가지고 있는 새로 정의된 자료형. 구조체 + 멤버 함수를 가질 수 있다. > 구조체와 비슷하지만 struct 대신 class 로 선언. > 맨 첫줄에 _ public: _ 와 같이 써줌. *Object :class 자료형을 가진 변수 -객체 지향 프로그래밍의 '객체' -객체들이 서로 연동되어 프로그램이 돌아간다. 멤버함수 멤버 변수 = class가 가지고 있는 변수. object가 존재해야 object의 멤버 변수 존재. class안에 함수가 선언되어 있다. 멤버 함수의 선언과 정의를 나누어 쓰면, 아래와 같다. 선언은 class안에 하고 정의는 가장 바깥쪽 지역에 한다. 멤버 함수임을 표시하기 위해 함수명 바로 앞에 _ "class name:: " _ 을 붙여야 한다.

2023년 1월 21일
·
0개의 댓글
·
post-thumbnail

C++ study..

1.C++ v.s. C C++ : 객체 지향 프로그래밍 언어 C : 절차 지향 프로그래밍 언어. 순서대로 코드를 진행! 객체 란? C++에는 class가 추가됐다!! class 역시 자료형의 하나. class형식을 가지고 object가 선언된다. c++에서는 c에서 가능했던 거의 모든 구문이 사용 가능하다. 추가된 구문? >변수의 생성, 초기화를 괄호를 사용해서! >bool type 변수 사용할 수 있다! >typecasting(형변환) 방법 한 가지 추가! >C++에서는 확장자(h)가 없는 header file들을 주로 사용하게 된다! iostream, string ... 2.Reference C의 pointer(다른 변수, 메모리의 주소값 참조하거나 넘겨준다) 와 비슷한 도구! reference는 주소값을 가진다 *reference 변수 선언 : 자료형 &변수명 =

2023년 1월 20일
·
0개의 댓글
·