월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
[1:57] 클래스 밖의 add 함수에서 L밸류 getCents맴버함수 사용
안녕하세요. 연산자 오버로딩을 들어가면서 어려워지네요.. 클래스 밖에서 맴버함수를 사용하기 위해 int getCents() const {return m_cents;} 대신 int& getCents() {return m_cents;} 를 사용하셨는데 참조를 사용하신 이유가 클래스 밖에서 사용하기 위해서인가요? 구체적으로 & 함수를 쓸때와 안쓸때의 차이점이 이해가 안갑니다. 강의 어느 부분을 다시보면 되는지도 답변 부탁드립니다!
- 미해결홍정모의 따라하며 배우는 C++
유투브로 수강하다 이제 인프런으로 건너왔습니다.
교수님의 유투브 [따배씨++]로 공부하다 인프런으로 건너왔습니다. 4.10 구조체 Structure까지 공부했습니다. * 저는 1987년부터 7년간 대한항공 시스템부에서 IBM Macro Assemble어로 프로그래밍, 설계, PM을 했고 PC가 처음 나왔을 때, Turbor-C와 DBase IV를 이용해 Mainframe-PC Interface Program을 1년간 했었습니다 이제 나이 많이 먹었지만, C++을 도전하고 싶습니다. 나이들어도 프로그래머가 되고 싶다는 젊은 시절의 꿈을 이루고 싶습니다. 다음은 파이선도 해보고 싶구요. 어셈블러->C->C++->Python 으로 이어지는 같은 계열의 프로그래밍으로 이어가고 싶군요. 앞으로 많은 가르침 받겠습니다.
- 해결됨홍정모의 따라하며 배우는 C++
역시 제일 어려운건 프로젝트 구성(설정)이네요.
구성 원리를 정확히 이해하면 나을 것 같은데 홍정모교수님은 어떻게 학습하셨나요?? ㅠㅠ 맨날 검색해서 블로그봐도 이해가 별로 안됐던거 같습니다. 질문1) Property => C/C++ => Additional Include Directories : 컴파일과정 중 Object 파일을 생성하기 위해 사용되는 헤더들의 경로 Linker => input => Additional Library Dependencies : 의존 외부라이브러리 경로 LInker => General => Additional Dependencies : 프로젝트에 사용되는 의존 외부 라이브러리 파일 이름ex) nanogui.lib 까지는 이해가 뙜는데 DLL파일을 복사해서 프로젝트 실행 경로에 옮겨두는 것이 이해가 안되네요. 항상 dll파일들은 exe와 같은 경로상에 위치해야하나요? (그런 규칙이 있는지 궁금합니다.)
- 미해결홍정모의 따라하며 배우는 C++
Performance 측정을 처음 해보네요. 좋은 정보 감사합니다.
전문가분들이 visual studio를 선호하는 이유를 조금씩 알 것 같네요.
- 해결됨홍정모의 따라하며 배우는 C++
c++이 정말 모던해졌다는걸 느낀 강의였습니다.ㄷㄷ;;
람다는 js나 python에서 즐겨사용했는데 C++ 이런 기능을 제공하니 정말 유연해졌네요. 혹시나하고 클로저도되는지 테스트해봤는데 안되는 것같네요. 대신 바인드를 이런 식으로 이용해서 흉내는 내볼수 있을 것 같네요. std::function<void()> doSomething(int x) { int a = x; auto f = [](int a)->void {cout << a << endl; }; return std::bind(f, a); } 좋은 강의 감사합니다.( 유트브도 잘보고 있습니다 :) )
- 미해결홍정모의 따라하며 배우는 C++
중간 삽입처리는 파일에서 어떻게 처리해야할가요?
강의 정말 잘 들었습니다. 매우 활용도가 높을거같은 내용이네요.임의 접근이 가능한 것을 알게되었는데 궁금한 것이 생겼습니다. 중간에 값을 넣었을 때 밀어내기를 처리할 때는 메모리에 배열처리하듯이 뒷 부분모두 복사하고 처리해야할가요?? aaaaaa ... (매우 큰 데이터)aaaa 에 맨앞에 b를 추가한다면 다 한칸씩 밀어주는 작업이 필요한가요?? 아니면 효율적인 알고리즘이 있으려나요? 트리 구조로 파일의 내용을 저장하면 수정작업 시간이 단축될 것 같은데 보통 에디터나 IDE들은 어떻게 이런 삽입 작업을 처리할가요?
- 미해결홍정모의 따라하며 배우는 C++
수업내용과 살짝 외람된 질문이지만 cctype 함수들은 왜 인자가 int일까요?
질문 제목 그대로 cctype헤더들은 입력값들이 문자를 검증할 텐데 왜 int를 인자로 받는 형태로 함수가 설계됐을 까요?wchar_t (short int)를 고려해서 그런가요? 그러면 short로 하는 게 바람직하지않을까요?
- 미해결홍정모의 따라하며 배우는 C++
교수님의 C강의 까지 수강하고 C++강의를 듣는데..
지금 C++강의를 듣는데 C강의랑 초반에 겹치는 부분이 있어서 그런데 어떻게 수강하는게 좋을지 여쭤보고 싶습니다.
- 해결됨홍정모의 따라하며 배우는 C++
Exception 의 Scope는 어떻게되나요?
throw Exception(); 을 호출시 catch받는 쪽에서 reference로 받는데 생성된 Exception은 임시 객체 로 취급하지않는건가요? 아니면Exception은 로컬변수로 취급을 안하는 건가요? Exception 객체의 duration 이 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C++
답이 바로 보이네요 ㅋㅋ
(사진)
- 미해결홍정모의 따라하며 배우는 C++
ㅋㅋ따라하다가 컴퓨터가 멈췄습니다.
메모리릭이 영향력이 크다는걸 경험했네요.
- 미해결홍정모의 따라하며 배우는 C++
정말 도움많이 되는 강의였습니다.
면접때도 나왔었는데 명쾌하게 답못했던 스택과 힙 장단점이었는데 잘 이해됐습니다.
- 미해결홍정모의 따라하며 배우는 C++
다차원 배열 동적 할당 질문
안녕하세요 강의 질문에 올려달라고 하셔서 다시 글 씁니다. 이 강의에서 2차원 배열을 동적 할당 할 때에 const int row = 3; const int col 5; int **matrix = new int*[row]; for (int r = 0; r < row; ++r) matrix[r] = new int[col]; 위와 같이 예를 들어 주셨는데요. 이중 포인터를 이용해서 2차원 배열 matrix가 어떻게 정의 되는지는 이해를 하였지만 new int*[row] 부분에서 int와 [row] 사이의 *는 무엇을 의미하는 건가요? *[]형태는 처음 보는 것 같아서요. 그냥 new int[row]로 해도 머릿속에선 될 것 같은데 컴파일 해보면 initializing: cannot converet from 'int *' to 'int **' 이라고 나오네요. 또 메모리 저장되는 것 관련해서도 의문점 이있습니다. 그냥 정적할당으로 matrix[row][col]; 이런식으로 정의를 하면 matrix[0][0], matrix[1][0], matrix[2][0] 이 딱 메모리 주소가 20씩 차이나서 연달아 있는데 new를 이용해서 동적할당으로 배열을 정의하면 메모리 주소가 좀 뒤죽박죽이더라구요. 이렇게 되면 큰 배열을 이용해서 실제 계산을 할 때 좀 비효율적이 되지 않나요? 연속적으로 하려면 어떤 식으로 동적 할당을 해야 하나요? 그리고 비슷한 식으로 3차원 배열도 만들어 보았는데요. d3[nx][ny][nz]인 3차원 배열을 만들기 위해 int ***d3 = new int**[nx]; for (int i = 0; i < nx; ++i) { d3[i] = new int*[ny]; for (int j = 0; j < ny; ++j) d3[i][j] = new int[nz]; } 위와 같이 만들어서 제대로 나오는 것도 확인 했습니다. 문제는 안되지만, 배열 할당하는것치고 조금 코드 자체가 긴것같아서요.. 혹시 조금 더 깔끔하게 만드는 법이 있을까요? fortran 같은 경우에는 그냥 allocate( d3(nx, ny, nz) )이런 식으로 한 줄이면 끝났거든요. 질문이 좀 많지만 답변해주시면 정말 감사하겠습니다!
- 미해결홍정모의 따라하며 배우는 C++
로컬변수(즉 스택 변수) duration에 관해 궁금한 것이 있습니다.
로컬변수(new로 할당하지않은)는 해당 scope를 벗어나면 해제되는 걸로 알고 있습니다. 레퍼런스가 추가로 선언됐을 때 로컬변수로 포함시키나요? 질문하다가 당연히 포함 안시키는게 맞다는 생각이 듭니다. 그렇게 되면 같은 메모리를 여러번(?) 해제하는 에러가 생길것같네요. 제가 이해하고 있는게 맞나요? 교수님
- 미해결홍정모의 따라하며 배우는 C++
동적 다차원 배열 관련 질문
안녕하세요 강의 잘 듣고 있습니다. 6.19 강의를 듣는 중에 의문이 생겨서 질문 드립니다. 2차원 배열을 동적 할당 할 때에 const int row = 3; const int col 5; int **matrix = new int*[row]; for (int r = 0; r < row; ++r) matrix[r] = new int[col]; 위와 같이 예를 들어 주셨는데요. 이중 포인터를 이용해서 2차원 배열 matrix가 어떻게 정의 되는지는 이해를 하였지만 new int*[row] 부분에서 int와 [row] 사이의 *는 무엇을 의미하는 건가요? *[]형태는 처음 보는 것 같아서요. 그냥 new int[row]로 해도 머릿속에선 될 것 같은데 컴파일 해보면 initializing: cannot converet from 'int *' to 'int **' 이라고 나오네요. 또 메모리 저장되는 것 관련해서도 의문점 이있습니다. 그냥 정적할당으로 matrix[row][col]; 이런식으로 정의를 하면 matrix[0][0], matrix[1][0], matrix[2][0] 이 딱 메모리 주소가 20씩 차이나서 연달아 있는데 new를 이용해서 동적할당으로 배열을 정의하면 메모리 주소가 좀 뒤죽박죽이더라구요. 이렇게 되면 큰 배열을 이용해서 실제 계산을 할 때 좀 비효율적이 되지 않나요? 연속적으로 하려면 어떤 식으로 동적 할당을 해야 하나요? 그리고 비슷한 식으로 3차원 배열도 만들어 보았는데요. d3[nx][ny][nz]인 3차원 배열을 만들기 위해 int ***d3 = new int**[nx]; for (int i = 0; i < nx; ++i) { d3[i] = new int*[ny]; for (int j = 0; j < ny; ++j) d3[i][j] = new int[nz]; } 위와 같이 만들어서 제대로 나오는 것도 확인 했습니다. 문제는 안되지만, 배열 할당하는것치고 조금 코드 자체가 긴것같아서요.. 혹시 조금 더 깔끔하게 만드는 법이 있을까요? fortran 같은 경우에는 그냥 allocate( d3(nx, ny, nz) )이런 식으로 한 줄이면 끝났거든요. 질문이 좀 많지만 답변해주시면 정말 감사하겠습니다!
- 미해결홍정모의 따라하며 배우는 C++
using namespace std 의 위치 및 return 0 생략 여부에 대한 질문입니다.
안녕하세요 교수님, 강의를 듣다가 몇몇 코딩 방식에 대한 궁금증이 생겨서 질문을 씁니다. (*원래는 질문에 해당하는 강의에 질문을 남기는것이 원칙임을 알지만, 이 질문은 특정 강의에 대한 질문이라고 하기엔 애매하다고 판단하여 이렇게 질문드립니다. ) 1. using namespace std; 의 위치 저는 교수님의 강의를 듣기 전까지는 #include <iostream> using namespace std; 와 같이 코딩을 해왔습니다. (using namespace std를 전처리기와 함께 배치) 그러나 교수님께서는 main함수 내에서 using namespace std를 선언하는 경우가 많으셨는데요, 교수님께선 특별히 main함수 내에서 using namespace std를 선언하는 이유가 있으신지 궁금합니다. 2. return 0; 의 생략 여부 마찬가지로 교수님의 강의를 듣기 전까지는 return 0;를 생략해도 된다고 배워왔기 때문에 return 0;를 항상 생략하고 코딩을 했습니다. 그런데 교수님께서는 return 0;를 main함수 내에서 꼭 작성하시는데, return 0를 생략 하지 않으시는 특별한 이유가 있으신지 궁금합니다. 감사합니다:)
- 미해결홍정모의 따라하며 배우는 C++
factorial 재귀함수의 연산에 관해 질문 드립니다.
int Factorial(int count) { if (count == 0) return 1; else return Factorial(count - 1) * count; } 위와 같이 계승을 구하는 재귀함수에서 Factorial(4)를 넘길 경우 마지막 으로 들어간 Factorial(0)*1;에서 빠져나올때 항등원으로 1로 계산이 된다고 봤습니다. 이게 맞는 말인가요? 맞으면 왜 항등원같은 이런식의 연산이 진행되는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
[16:30] Inner class를 이용하여 정적 멤버 변수를 초기화하는 과정에 대한 질문입니다.
안녕하세요 교수님, 이번 겨울 교수님 덕분에 C++ 공부 즐겁게 하고 있는 학생입니다. 다름이 아니오라 제가 이 코드를 실행하다가 막히는 부분이 있어서 질문드립니다. 우선 실행 환경은 - macOS Catalina - CLion / Clang 입니다. VS 위주로 수업이 진행되고, 이외의 플랫폼과 툴에 대해서는 답변이 어려울 수 있다는 말씀을 소개 페이지에 하셨지만 혹여나 제가 놓치고 있는 부분이 있을까 해서 질문 드립니다. < 수정 > main 함수 위쪽의 int Something::s_value = 1234; 로 변수의 값을 초기화 해주지 않은 걸 뒤늦게 발견했습니다. _init 이라는 내부 클래스를 만들고, Something의 멤버 변수(?)로 s_initializer 라는 인스턴스를 생성한 이유가 이 인스턴스가 생성되면서 생성자가 호출 -> 생성자가 s_value를 9876이라는 값으로 초기화 인 것 같습니다만, s_initializer 호출 전에 s_value를 초기화시키지 않으면 아래의 오류가 발생하는 이유가 무엇인가요? (너무 질문이 길어져 죄송합니다...) #include <iostream> using namespace std; class Something { public: class _init // inner class { public: _init() // constructor { s_value = 9876; } }; private: static int s_value; int m_value; static _init s_initializer; public: Something() // constructor : m_value(123) {} // static member function static int getValue() { /* * in static member function, you CANNOT use 'this pointer' * since both static member variable & function are independent * to the instances constructed using the class definition. */ return s_value; } }; // THIS IS NOT WORKING!! Something::_init Something::s_initializer; int main() { Something st1; // cout << st1.getValue() << endl; /* fptr -> temp * and the function temp NEEDS 'this' pointer as its input. */ /* In contrast, * static member functions are independent to the instances, * since it has its own address on memory so we don't need to * pass the pointer of instance('this') to it. */ int (*fptr2)() = &Something::getValue; cout << (*fptr2)() << endl; return 0; } 위에 첨부해드린 코드를 실행시키면 다음과 같은 에러를 볼 수 있습니다. < 에러 메시지 > Undefined symbols for architecture x86_64: "Something::s_value", referenced from: Something::getValue() in main_8_11.cpp.o Something::_init::_init() in main_8_11.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)getValue() 라는 정적 멤버 함수에 의해 정적 멤버 변수 s_value가 참조되는 과정에서, 이 변수를 컴파일러가 찾을 수 없다는 내용인 것 같습니다.(제가 생각한 게 맞나요?) 교수님의 강의 코드와 요점 정리를 해주신 분 블로그의 코드까지 참고해서 작성했는데도 오류가 사라지지 않아서 이렇게 질문을 드립니다. 추가적으로 문제 상황을 설명드리는데 있어 도움이 될까 싶어 한 가지 덧붙입니다: Something::_init Something::s_initializer; (main 함수 위) 에서 s_initializer 아래 노란줄이 표시되는데, 커서를 갖다대면 이런 메시지가 나옵니다. Clang-Tidy: Initialization of 's_initializer' with static storage duration may throw an exception that cannot be caught 교수님의 친절한 설명 덕분에 처음 배울 때엔 어렵게만 느껴졌던 참조자와 포인터 개념을 잡고 여기까지 올 수 있었습니다. 긴 질문 읽어주셔서 감사드립니다!
- 미해결홍정모의 따라하며 배우는 C++
for (auto &element : v) 에서 & 를 붙이는 이유가 뭔가요??
3:52 에서 for (auto &element : v) 에서 & 를 붙이는 이유가 뭔가요?? & 안붙여도 똑같이 1,2,3 이 호출이 되는데 & 를 붙이는 이유가 따로 있나요?
- 미해결홍정모의 따라하며 배우는 C++
char *argv[]
그동안 char * argv나 char argv [] 같은 형태는 봤는데 char * argv[]이런 형태는 지금 처음 보는 것 같습니다. 혹시 위와 같은 형태는 명령줄인수를 할 때만 main의 파라미터로 쓰이고, 코드안에서는 안쓰이는 것이 맞나요??