월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
Vscode 이용하기
안녕하세요 항상 질좋은 강의 감사드립니다. 개인적인 질문과 바램이라 그냥 넘어가셔도 됩니다. 제가 파이썬을 자주 사용하며 vscode를 애용하는데 c/c++도 vscode로 이용하려 하는데 뭔가 g++? 이런거 깔고 복잡한 설정과정을 매번 번거롭게 해야하더라구요... vs studio를 따고 다운 받아 쓰기에는 아깝기도 하고.. 혹시 현업 c++분들은 vscode는 잘 안쓰시나요...?
- 미해결홍정모의 따라하며 배우는 C++
4.1 강 12:24 초때 질문이 있습니다
#include <iostream> #include <iomanip> using namespace std; namespace work1 { int a = 1; void dosomething() { a = a + 3; cout << a << endl; } } namespace work2 { int a = 2; void dosomething() { a = a + 5; cout << a << endl; } } int main() { work1::a; work1::dosomething(); work2::a; work2::dosomething(); } 여기서 선생님께서 work1::a; 와 work2::a; 를 선언하신 이유가 뭔가요?
- 미해결홍정모의 따라하며 배우는 C++
저는 영역을 제한해도 비교해도 에러가 안뜨네요.
2:40에서 저렇게 해도 저는 제한전이랑 똑같이 뜨는데요?
- 해결됨홍정모의 따라하며 배우는 C++
연습문제 관련 질문드립니다.
마지막에 내주신 연습문제에서 '기사의 좋아요를 다시 클릭했을 때'를 저는 my_article_flags ^= option_liked;로 했는데 답안에는 my_article_flags &= ~option_liked;로 되어있습니다. 마찬가지로 13:57초 부분에서도 items_flag &= ~opt3으로 하셨는데 저는 items_flags ^= opt3이라고 생각했습니다. 13:57초 부분이나 연습문제 부분이나 둘 다 같은 경우이고, ^= 을 쓰든 &= ~을 쓰든 결과는 똑같았는데 혹시 &=~ 대신에 ^=을 쓰면 안 되는 이유가 혹시 있을까요? ^=을 쓰는 것은 이해가 쉽게 가지만 오히려 &=~ 을 쓰는 경우는 이해가 잘 안 돼서 쉽게 와닿지가 않습니다 ㅠ ㅠ
- 미해결홍정모의 따라하며 배우는 C++
[9:00 부근] Mother class 멤버 변수를 Child class의 initializer list 에서 초기화하는 부분
안녕하세요, 아래의 코드에서 error 가 발생하는 부분에 대해서 문의드려요. 강의에서 교수님께서 debugger로 찍어주셨듯이 호출되는 순서는 아래와 같은데요. Mother class의 initializer list ->Mother class의 constructor -> Child class의 initializer list->Child class의 constructor. error가 나는 부분에서는 mother class의 멤버 변수가 이미 초기화되어 메모리를 차지하고 있는데 child class에서 초기화할 수 없는게 이해가 되지 않습니다. 강의에서 교수님께서 계속 반복적으로 말씀해주시는데 제가 뭔가 놓친게 있는걸까요? 호출 순서랑 아래의 에러 발생하는 이유가 매칭이 되지 않네요. 항상 답변주셔서 감사합니다. #include <iostream> using namespace std; class Mother { public: int m_i; public: Mother() :m_i(0) { cout << "Mother constructor" << endl; } }; class Child :public Mother { public: double m_d; public: Child() :m_d(2.0),m_i(1) //error 발생 { cout << "Child constructor" << endl; } }; int main() { Child c1; return 0; }
- 미해결홍정모의 따라하며 배우는 C++
46:00 헤더 파일이 필요한 이유가 궁금합니다.
교수님 유익한 강의 감사합니다. 하나의 소스파일에서 extern으로 정의하면 link가 되기때문에 다른 소스파일에서도 그 함수가 사용이 가능하잖아요. 그래서 제가 생각하기로는 헤더파일을 만들지 않아도 될것같은데 헤더파일을 만드는 이유 또는 필요성이 무엇인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
release 오류(23분)
release 모드에서 리빌드를 하고 디버깅을 했는데 강의에서와 같이 0을 출력하지 않고 그림과 같이 명령 프롬프트를 실행하지 못하는데 큰 문제가 있는 건지, 아니면 컴퓨터에 따라 다른 현상인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
signed 와 unsigned 질문
33:47에 1001 1110을 unsigned 라고 가정해야하는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
파일을 출력해서 배열에 저장하는 방법
안녕하십니까 C++을 열심히 수강하고 있는 학생입니다. 다름이 아니오라 csv 파일을 입력 받아 동적 배열에 입력해 주는 코드를 만들고 싶어서 코드를 짜 보았습니다. #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { vector<int> array; ifstream fin; fin.open("info.txt"); if (fin.is_open() == false) { cout << "현재 정보가 없습니다" << endl; } else { for (int i = 0; i < 5; i++) { fin >> array[i]; cout << i << array[i] << endl; } } if (fin.is_open() == true) { fin.close(); } } 하지만 로드 하는 중에 문제가 발생하여 다음과 같은 런타임 에러가 발생합니다. 동적 배열에서 문제가 생긴 것 같은데 무엇이 문제인지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
[연습문제] nullptr 과 \0 관련 질문 2가지
안녕하세요. 수강생입니다. 연습문제를 풀다가 다음과 같은 현상을 발견해서 질문합니다. 첫번째 시도로 처럼 작성하였는데 정상적으로 작동하는 것을 확인하였습니다.Q1 . 그래서 다음과 같이 nullptr을 이용하여 작성하니 쓰레기 값까지 같이 출력되는 문제가 생겼습니다. nullptr을 제가 어떤식으로 잘못 사용하고 있는지 알려주실 수 있나요? 이렇게 작성한 의도는 ptr이 널 포인터가 되는 순간 작동을 종료하기 위함입니다. *아래와 같이 작성할 경우 제대로 나옵니다. NULL이 매크로로 0으로 지정되어 있어 그런 것 같습니다. Q2. 포인터에 증감 연산자 사용 문제 while (*ptr != NULL) { cout << *(ptr); ++ptr; } 라고 작성하였을 때 while 문에서 ptr++ 을 하고 *ptr을 출력하면 j 부터 시작이 되지 않습니다.++ptr로 인하여 그런 것 같은데 이경우에는 어떤식으로 초기화를 해야 j 를 출력하게 할 수 있을까요? char* ptr = name; 를 써서 초기화를 하는 줄 알았는데 그러면 할당을 여러번 한다고 컴파일 에러가 나옵니다. 읽어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
const 와 constexpr차이
전에 헤더 파일을 만들때는 constexpr로 만들었는데 이번엔 const를 쓰시는데 둘의 차이가 뭔가요?
- 해결됨홍정모의 따라하며 배우는 C++
(14:20) (const *Date*& original)
안녕하세요! 매번 정성스러운 답변 감사합니다. 질문이 있어요~! void copyFrom(const Date& original) { m_month = original.m_month; m_day = original.m_day; m_year = original.m_year; } 영상 (14:20)를 보면 copyFrom 함수 파라미터에 class 함수를 받는 것을 볼 수 있습니다. => (const Date& original) Q1. 어떻게 받아드릴 수 있는건가요?? Date를 넣으면 class Date의 ptrivate: 에 있는 데이터에 접근할 수 있기 때문인가요? Q2. 제가 지금 잘못 이해하고 있는 것 같은데, public: 아래로는 전부 public으로 설정이 되는건가요? 아니면 해당 function마다 그 위에 public이라고 선언해줘야 하나요? ex.) 1번 public: void function1(){} void function2(){} void function3(){} // 전부 다 퍼블릭~ 2번 public: void function1(){} // 이 친구만 퍼블릭 void function2(){} void function3(){} 어느 쪽이 맞는 public: 설정인가요?
- 미해결홍정모의 따라하며 배우는 C++
헤더파일이 인클루드되지 않습니다
헤더파일폴더에 14분에 한것처럼 헤더파일을 만들었는데 cpp파일에서 인클루드 하려고 하면 빨간줄 뜨면서 no such file or directory 라고하면서 에러가 납니다 그리고 댓글로 질문을 올린다는 것이 무슨말인지 모르겠어요
- 미해결홍정모의 따라하며 배우는 C++
버퍼에 대해 알고싶습니다
int main() { char a = '65'; cout << a; cin >> a; cout << a; } 여기서 처음 a 를 출력하면 5가나오는 이유는 무엇인가요? 그리고 6은 어떻게 되는건가요? 버퍼에서 사라지는건가요?
- 미해결홍정모의 따라하며 배우는 C++
3.1 연잔자 우선순위와 결합법칙 질문
안녕하세요. 수강생입니다. 따라해 보세요에서 응용을 하다보니 다음과 같은 현상이 일어났는데 궁금해서 질문 올립니다. 코드 A : int main() { int a(1), b(2), c(3); a = ++b = c; return 0; } 코드 B : int main() { int a(1), b(2), c(3); a = b++ = c; return 0; }코드 A는 모두 값이 3으로 나오나 코드 B는 작동이 되지 않습니다. (b++)을 해도 컴파일이 되지 않는데 이유가 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
IntArray 클래스 구현에 대해 feedback받을 수 있을까요?
안녕하세요, 질문은 아니라서 문의드리는 내용에 대해 피드백을 받을 수 있을지는 모르겠지만, 조그만 피드백이라도 쥐면 공부하는데 큰 도움이 될 것 같습니다. 감사합니다. -------------------------- #include <iostream> #include <initializer_list> using namespace std; class IntArray { private: int m_length = 0; int *m_data = nullptr; public: IntArray(const int &length_in) :m_length(length_in) { m_data = new int[m_length]; } IntArray(const std::initializer_list<int> &list) :IntArray(list.size()) { int count = 0; for (auto &e : list) { m_data[count] = e; count++; } } IntArray& resize(const int& length_in) { if (m_length == length_in) return *this; else if (m_length < length_in) //길이가 길어진 경우, 뒤에 0 붙임 { int *temp = new int[length_in]; for (int i = 0; i < m_length; i++) temp[i] = m_data[i]; for (int i = m_length; i < length_in; i++) temp[i] = 0; m_length = length_in; delete[] m_data; m_data = temp; } else //길이가 짧아진 경우 { m_length = length_in; int *temp = new int[m_length]; for (int i = 0; i < m_length; i++) temp[i] = m_data[i]; delete[] m_data; m_data = temp; } return *this; } IntArray& insertBefore(const int &val, const int &idx) //10 1 { //1 3 5 7 9 //1 3 5 7 9 0 //1 10 3 5 7 9 resize(m_length + 1); //input index 이전 : 변화없음 //input index 이후 for (int i = m_length-1; i > idx; i--) { m_data[i] = m_data[i - 1]; } //input index 값 m_data[idx] = val; return *this; } IntArray& remove(const int &idx) //3 { //1 10 3 5 7 9 //1 10 3 7 9 //concept : index 해당 element 로 하나씩 앞으로 당기고, resize (m_length-1); for(int i=idx;i<m_length-1;i++) m_data[i] = m_data[i + 1]; resize(m_length - 1); return *this; } IntArray& push_back(const int &val) { resize(m_length + 1); m_data[m_length - 1] = val; return *this; } IntArray& operator =(const std::initializer_list<int> &list) { delete[] m_data; m_length = list.size(); m_data = new int[m_length]; int count = 0; for (auto &e : list) { m_data[count] = e; count++; } return *this; } friend ostream& operator <<(ostream &out, const IntArray &int_arr) { for (int i = 0; i < int_arr.m_length; i++) out << int_arr.m_data[i] << " "; return out; } ~IntArray() { delete[] m_data; } }; int main() { IntArray my_arr{ 1, 3, 5, 7, 9 }; cout << my_arr << endl; my_arr.insertBefore(10, 1);//1 10 3 5 7 9 cout << my_arr << endl; my_arr.remove(3); //1 10 3 7 9 cout << my_arr << endl; my_arr.push_back(13); //1 10 3 7 9 13 cout << my_arr << endl; }
- 미해결홍정모의 따라하며 배우는 C++
[9:48] Lecture class에서 assignTeacher 함수의 parameter 형태 문의
안녕하세요, 강의에서 Lecture class 내부에 아래와 같이 함수를 정의하고, parameter형태는 아래와 같은데요, void assignTeacher(const Teacher & const teacher_input) {} 왜 const Teacher & teacher_input으로 사용하지 않고, const Teacher & const teacher_input 형태로 작성하셨는지 문의드립니다. 위와 같이 const를 2번 사용하는 경우는 앞선 강의 중 pointer에서 예로 보여주시긴 하셨는데, reference에서는 위와같이 써야하는 이유를 모르겠습니다. reference variable이 주소값을 변수 내부에 가지고 있지 않고, de-referencing해서 사용하지도 않기때문입니다. 아래의 홈페이지에서도 "Does “X& const x” make any sense?" 에서 const는 redundant라고 설명하는데 강의에서는 왜 저런 형태로 사용하는지 문의드립니다. "https://isocpp.org/wiki/faq/const-correctness#const-ref-alt"
- 미해결홍정모의 따라하며 배우는 C++
마지막 friend member 함수에 대해 질문합니다.
마지막 friend에 대한 질문입니다. class B 안에 void doSomething(A &a)가 있고 그 다음 class A 에 friend void B::doSomething(A &a)가 있어서 이것을 따로 떼어낸 void B::doSomething(A &a)가 작동되는 것은 이해 하였습니다. 그래서 응용해 보았는데요. 위에 있던 class B와 아래에 있던 class A의 순서를 위의 class A, 아래의 class B로 바꾸고, 전방선언 되어있던 class A를 class B로 바꾸었는데도 잘 안됩니다. class A와 class B의 순서를 바꾸었을 때는 어떻게 하면 그 전과 같이 결과를 낼 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
템플릿 상속을 받지 않고 부분적 특수화할때 오류
안녕하세요. 강의 정말 잘 듣고 있습니다. 템플릿을 부분적으로 특수화할때 상속을 받아서 void print()함수를 char타입에 대해 특수화를 해주셨잖아요. 그런데 앞 강의에서 member function을 특수화할때처럼 전체 부모 클래스를 상속받지 않고 그냥 print()함수만 char타입에 대해 특수화하면 안되나 해서 해봤는데 오류가 나더라구요. 즉, 강의에서 보여주셨던 부분을 주석처리하고 제가 member function부분만 특수화를 해봤는데.. template argument list must match the parameter list 라는 오류가 나더라구요. 앞 강의에서는 아래와 같은 member function 특수화할때 별 문제가 없었는데 무슨 차이인건가요? //template <int size> //class StaticArray<char, size> : public StaticArray_BASE<char, size> //{ //public: // void print() // { // for (int count = 0; count < size; ++count) // std::cout << (*this)[count]; // std::cout << endl; // } //}; template<int size> void StaticArray<char, size>::print() { for (int count = 0; count < size; ++count) std::cout << *(this)[count]; std::cout << std::endl; }
- 해결됨홍정모의 따라하며 배우는 C++
(9:30)검토 부탁드립니다. 보기 편하게 만들었어요.
*150% 확대해서 보면 보기 편합니다. 1. 문제 발생 // 1번 주소 값 void doSomething(int studnet_score[20]) { cout << (int)&studnet_score << endl; //@1 } // 2번 주소 값 int main() { int student_score[20] = { 1, 2, 3, 4, 5 }; cout << (int)&studnet_score << endl; // @2 doSomething(studnet_score); } @1과 @2의 주소 값이 다르다!! 2. 문제 원인! void doSomething(int studnet_score[20]) { cout << (int)&studnet_score << endl; -------------------- cout << studnet_score[0] << endl; | -> 포인터 변수들 cout << studnet_score[1] << endl; ----------------------- } // void doSomething 파라미터 안에 있는 배열은 사실 배열이 아니다! // 포인터 변수이다! // 즉, { }안에 있는 studnet_score[0]들도 포인터 매개변수들이다! 3. 주소 값이 다른 이유! // #1 int main() { int student_score[20] = { 1, 2, 3, 4, 5 }; // @1 : 난 선언과 동시에 주소값 있지롱~! cout << (int)&studnet_score << endl; doSomething(studnet_score); // @2 : 나도 주소 값 가지고 싶어!! } // #2 int main() { int student_score[20] = { 1, 2, 3, 4, 5 }; // @1 : 내꺼 줄게 같이 쓰자! cout << (int)&studnet_score << endl; doSomething(studnet_score); // @2 : 고마워!! } // #3 void doSomething(int studnet_score[20]) // @3 : 주소 받을 자리, 새로 만들어야겠네! // (@1번의 주소를 받기 위한 새로운 주소를 만듬) { cout << (int)&studnet_score << endl; // @3 : 내가 그 새로운 주소의 주인공이야! } int main() { int student_score[20] = { 1, 2, 3, 4, 5 }; cout << (int)&studnet_score << endl; doSomething(studnet_score); // @2 : void야! @1번한테 받은 주소값 보내줄게! ↑ } // #4 void doSomething(int studnet_score[20]) { cout << (int)&studnet_score << endl; // @3 : 나는 @1번의 주소를 가져오기 위한 주소값이야! cout << (int)&studnet_score[0] << endl; // @4 : 야!! @3번! 너 나랑 주소값이 다르잖아! } // #5 void doSomething(int studnet_score[20]) { cout << (int)&studnet_score << endl; cout << (int)&studnet_score[0] << endl; // @4 : @1의 첫 번쨰 주소값하고 같구나! } int main() { int student_score[20] = { 1, 2, 3, 4, 5 }; cout << (int)&studnet_score << endl; // @1 : 반갑다, @4번! 나랑 같은 주소값이야! cout << (int)&studnet_score[0] << endl; // @5 : 어서와, @4번. 나도 너랑 같아. doSomething(studnet_score); } 4. 정리 main의 배열 student_score[0](첫 번째) 주소 값 복사 -> void의 파라미터는 주소값을 받기 위한 주소 만듬 -> void의 포인터 배열은 [0](첫 번째)부터 main의 student_score과 같은 주소지를 갖음 의문점) <2 .문제 원인>에서 void 안에 있는 변수는 모두 포인터 변수라고 하셨는데, 그러면 아치피 main에서 주소값 받기 위해서 만든 새로운 주소값으로 쭉쭉 나가면 될건데... 어째서 [0](첫 번째)부터는 main 배열[0](첫 번째)와 다시 주소가 같게 한 걸까요...? 궁금합니다..