라벨이 C플플인 게시물 표시

[C++] 클래스 객체 생성 정적 할당, 동적할당 하는 방법

이미지
클래스 객체 생성 정적할당, 동적할당 하는 방법 C 와 C++의 가장 큰 차이점 중 하나는 C++에는 class가 있다는 거다. class : 객체를 사용하기 위한 틀이라고 많이 표현한다. 멤버 변수, 멤버 함수를 선언한다. 객체 : class라는 틀을 그대로 복사해 온다. 복사를 했으므로 class에 있는 멤버 변수, 멤버 함수를 사용 할 수 있다. class가 하나만 존재 하면 수 많은 객체를 생성 하여 사용 할 수 있다는 장점이 있다. 즉 생산성이 좋다.  class의 변수, 함수를 사용하기 위해서 객체를 만들어 줘야 한다. 객체 생성 방법에는 2가지 방법이 있다. 정적할당(stack) ' . ' 연산자 사용 이유 : 구조체 변수를 사용 할때 ' . ' 연산자 사용 한 것 처럼 정적 할당한 객체는 ' . ' 연산자를 사용해서 클래스의 멤버 변수를 사용한다. #include < iostream > using namespace std ; class Function { public : int num = 10 ;//멤버 변수 }; void main() { Function function; // 객체 생성 int num = function.num; // . 연산자를 사용해서 멤버 변수 사용 cout < < num; } 동적할당(heap) new 연산자를 사용해서 동적 할당을 해준다.  -> 연산자를 사용하는 이유 : 동적 할당을 위해 *funtion를 포인터로 선언 했다. 포인터가 class의 멤버 변수를 사용하기 위해서는 -> 연산자를 사용해야 한다. 실무에서는 객체 할당은 정적보단 동적 할당을 많이 사용한다. 구조적인 프로젝트를 만들기 쉽기 때문.  #include < iostream > using namespace std ; class Function { public : int num = 10 ;//멤버변수 }; void main...

[Visual Studio] 호출 스택 보는법

이미지
 visual studio 호출 스택 보는 방법 디버그 > 창 > 호출 스택 왼쪽 아래 호출 스택 창이 뜬다. 호출 스택은 디버깅 중 많이 사용 된다. 오류가 발생했을 때 가장 최근 호출 스택으로 이동하여 버그를 찾아 낼 수 있다.

[C++] C++에서 SQLite 사용하기

이미지
SQLite를 C++ 과 연동해서 사용하는 방법을 알아 보자. 본문은 코딩하는 방법을 다룰 것이므로 이전 내용은 아래 링크에 순서대로 설명 되어있다. Sqlite 설치하기 https://skypirateking.blogspot.com/2022/08/sqlite.html 헤더 파일, dll 설치/ lib 파일 만들기 https://skypirateking.blogspot.com/2023/05/sqlite3-sqlite-c-lib.html 헤더 파일, lib, dll 추가하기 https://skypirateking.blogspot.com/2023/05/visual-studio-visual-studio-2022.html DB 연결 -> 테이블 생성 -> 데이터 insert를 작성했다. 아래 링크를 참조 했다.  링크에 다른 예제도 많으니 참고하면 좋다. https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm 전체 소스 다운 https://drive.google.com/file/d/10Fyx65OWsWUofveZFSbSmNsvPC6qFCYh/view?usp=sharing #include <stdio.h> #include <sqlite3.h>  int Sqlite_Connect(sqlite3* db); int Sqlite_Create(sqlite3* db); int Sqlite_Insert(sqlite3* db); static int callback(void* NotUsed, int argc, char** argv, char** azColName) {     int i;     for (i = 0; i < argc; i++) {         printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");     }   ...

[Visual Studio] Visual Studio 2022 외부 라이브러리 추가

이미지
Visual Studio 2022에서 C/ C++  헤더파일, lib,  dll  추가 하는 방법 총정리 sqlite3.h, sqlite3.lib, sqlite3.dll 추가를 예제로 했다. 다 테스트 해보면서 작성 한 거니 자세히 읽어 보기 바란다. 아래 사진은 프로젝트를 만들면 생성되는 초기 폴더다. 우선 헤더 파일, lib, dll을 폴더 안에 넣어보자. 제일 처음 프로젝트를 만들 때 생성되는 폴더를 연다. 여기서 솔루션(.sln)이랑 이름 같은 폴더를 들어간다.(그림 처럼 SQLite_Example.sln(솔루션)과 같은 SQLite_Example 폴더에 들어간다.) dll 파일을(sqlite3.dll) 넣어 준다. 이제 헤더 파일, lib파일을 추가해 주자. dll을 넣은 폴더에서 Sqlite3 폴더 생성 후 들어간다.(아무이름 하면 됨) Sqlite3 폴더에 sqlite3.h, sqlite3.lib를 넣어준다. 이러면 dll, h, lib 파일을 솔루션 폴더에 넣었다.  이제는 visaul studio에서 설정을 해줘야 한다. 시작 전에 사람들이 헷갈려 하는 부분을 정리 하자면 1. 헤더 파일 , lib 는 아무 폴더에 있어도 visual sutdio가 읽어 올 수 있다. 2. dll 은 두 가지 추가 방법이 있다. 1) 경로 설정해주기 이 방법은 dll이 솔루션 폴더 안에 없으면 visual sutdio가 읽어오지 못해 오류가 발생한다. 2) 경로 설정 + 환경변수 추가 해주기 환경변수를 추가 해 줌으로써 dll이 솔루션 폴더 안에 없더라도 visual studio가 읽어올 수 있다. 이 방법을 많이 쓴다. 아래에 dll 추가에서 2가지 방법을 작성했다. 3.dll을 못 읽어오는 이유는 대부분 dll  파일을 잘못된 폴더에 넣었기 때문이다.  dll 과 lib, 헤더파일의 위치를 다르게 한 이유는 예시를 위해서다.  1. 헤더파일 추가 방법 프로그램 작성하면서...

[C++] C++ sqlite3.lib 만들기

이미지
SQLite C++ lib 만들기 SQLite를 사용하기 위해선  sqlite3. lib 파일이 있어야 한다. sqlite3.lib 파일은 SQLite 사이트에서 다운 받은 sqlite3.def ,  sqlite3.dll 을 가지고 만든다. 1. SQLite 사이트에 들어가 각각 Zip을 다운 받는다. 1) Source Code      C source code as an  amalgamation , version 3.42.0. 2)  Precompiled Binaries for Windows      32bit 면 32-bit DLL (x86) for SQLite version 3.42.0.      64bit 면  64-bit DLL (x64) for SQLite version 3.42.0. SQLite 사이트 https://www.sqlite.org/download.html 2. lib 파일 만들기 각각 압축을 풀면 두 개의 폴더가 나온다. 3. 시작버튼을 누른 뒤  Developer Command Prompt for VS 2022 을 검색한다. 뒤에 숫자는 자신 visual studio 버전 치면 된다. 4. cmd 같은 화면이 나온다. 디렉토리를  sqlite3.def ,  sqlite3.dll  이 있는   sqlite-dll-win64-x64-3420000 폴더로 이동 하면 된다. 예시로  C:\Sqlite3\sqlite-dll-win64-x64-3420000 경로까지 이동 하면 된다. 5. 경로 이동 하는 방법에 대해 설명하자면  먼저 C드라이버 까지 이동을 해야 한다. cd.. 작성 후 엔터를 누르면 이전 폴더로 이동 한다. cd.. 를 작성 후 엔터를 반복하여 C:\> 까지 간다. 6.   이제   C:\Sqlite...

[Visual Studio] 코드 수정하며 디버깅 하기

이미지
Visual Studio에서 코드 수정하면서 디버깅 할 수 있는 방법 포스팅.  Control + Shift + F5를 활용하면 된다. 아래 소스를 예시 #include<iostream> using namespace std; int subtract(int a, int b) { int c = a - b; return c; } void main() { int a = 1; int b = 2; int c = subtract(a, b); cout << "a - b = " << c; } - 우선 디버깅에 익숙하지 않은 사람이 수정하는 방식을 예제를 통해 알아보자. 1. 뺄셈 함수를 통해 '-1' 이 나오게 하고 싶은데 '3'이 나온다. 2. subtract() 함수가 잘 못되었으니 5번 라인에 중단점을 건 후 실행 시킨다. 3. 디버깅 하다 보니 5번 라인의 '-' 대신 '+'가 들어가 '-1' 이 아닌 '3'이 나왔다. 4. '-' 로 수정해주고 재시작 하면 올바른 답 -1 이 나온다. 코드가 짧으면 위에 방법처럼 (오류 발견 -> 수정 -> 프로그램 종료 -> 재시작 -> 확인) 순서로 해도 된다.  하지만 어떤 소스는 실행만 3분씩 걸리는 프로그램도 있다. 하나씩 수정 할 때마다  재시작을 한다면 작업시간이 몇 배로 늘어난다. 아래 방법을 통해 이런 불상사를 방지 할 수 있다. - 디버깅 하는 중에도 코드 수정하기 1. 마찬가지로 5번 라인에 중단점을 찍은 후 실행 시킨다. 2. 버그를 발견 했다. '+'를 '-' 로 바꿔준 다음 ctrl + shift + F5를 눌러준다. 3. 프로그램이 종료 되지 않고 수정 된 내용을 적용 시킬 수 있다. F10을 내려서 확인하면 값이 바뀐 것을 확인 할 수 있다. 4. F5 눌러서 쭉 실행 해보면 '-...

[C++] const (콘스트) 란?

이미지
const(콘스트) 란 무엇일까? 변수를 선언 했을 때 값을 상수로 만들어 준다. 변수 : 변하는 수 상수 : 변하지 않는 수 상수의 대표적인 예로는 #define 이 있다. 물론 define은 문자도 된다. #include<iostream> using namespace std; #define NUM15 15; void main() {     cout << NUM15; } 위 소스를 복붙 후 실행 해 주면 15가 나오는 걸 확인 할 수 있다. Const  이제 콘스트 예시를 보자. #include<iostream> #define NUM15 15; void main() { const int a = 5; a = 4; } 위 소스를 visual로 복사해 보자. 변수 a앞에 const를 붙여 준후 변수 값을 변경 할 시 에러가 발생 한다.  개발자의 수정하지 말라는 강력한 의지를 담을 수 있다.