월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
6:35 코드 질문
클래스 B 선언 부분에서, 생성자 선언후 빈{}는 무슨 용도인가요?? 아래 코드에서 17째줄 {} 입니다 #include <iostream>#include <string>#include <array>#include <limits>#include <vector>#include <algorithm>using namespace std;class B {private: int m_b;public: B(const int& m_b_in) : m_b(m_b_in) {}};class Something {private: int m_i; double m_d; char m_c; int m_arr[5]; B m_b;public: Something() : m_i(1), m_d(3.14), m_c('a'), m_arr{ 1, 2, 3, 4, 5 }, m_b(m_i-1) // 이게 member initializer. 물론 여기서 초기화 하고 20-22줄에서 다시 오버라이드도 가능 //m_i{1}, m_d{3.14}, m_c{'a'}로 하면 형변환이 안됨. 좀 더 엄격함. 자동으로 캐스팅이 안됨. { m_i = 2; m_d = 3.15; m_c = 'b'; } void print() { cout << m_i << " " << m_d << " " << m_c << " "; for (auto& e : m_arr) cout << e << " "; cout << endl; }};int main() { Something Some; Some.print(); return 0;}
- 미해결홍정모의 따라하며 배우는 C++
4.6 14:00 예제. int 입력인데 왜 퍼버에 남아있나요?
4.6 14:00 예제에 int age에 값을 1 입력 했는데 왜 그 값이 string에 넘어가는지 이해가 안됩니다. 이전 예제의 string name;에 jack jack을 입력한 경우는 띄어쓰기 때문에 버퍼에 jack이 남아있는 것은 이해를 했습니다. 그러나 int age;에 1을 입력하면 버퍼에 값이 안 남아 있어야 하는 것 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
15:55 return 생략시 쓰레기값 나오는 이유
getStruct() function에 retunr을 안넣어주면 trash value?가 나오는데 이유가 무엇인가요? (return 넣으면 제대로 작동해요)근데 trash value도 아닌 것이 동일한 값이 계속 나옵니다#include <iostream> using namespace std; struct S { int a, b, c, d; }; S getStruct() { S my_s{1, 2, 3, 4}; // return my_s; } int main() { S main_s = getStruct(); cout << main_s.a << endl; cout << main_s.b << endl; cout << main_s.a << endl; cout << main_s.b << endl; } >> 15644 1 15644 1
- 미해결홍정모의 따라하며 배우는 C++
비트 연산 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 14분에 item3 를 사용했을때items_flag &= ~opt3; 를 하셨는데items_flag ^= opt3; 로 해도 괜찮은가요?둘 사이에 차이가 있는지 아니면 같은 건지 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
포인터 질문있습니다.
안녕하세요, 아래 두 코드가 동일하게 작동해야 한다고 생각했는데, 1이 틀린 이유가 궁금합니다.1. typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } 2. void bar(const int* ptr) { int val = 1; ptr = &val; } 1 full code #include <iostream> using namespace std; typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } int main() { int length2 = 2; pint ptr2 = &length2; bar2(ptr2); }
- 미해결홍정모의 따라하며 배우는 C++
복사 생성자 부분에서 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 9.11, 11분 21초 입니다.교수님께서 복사 생성자를 MyString(const MyString &src) { cout << "Copy constructor" << endl; m_length = src.m_length; m_data = new char[m_length]; if (src.m_data != nullptr){ for (int i = 0; i < m_length; i++) m_data[i] = src.m_data[i]; } else m_data = nullptr; } 이렇게 정의 하셨는데 해당 코드에서는 m_data의 제일 끝에 널 문자를 두지 않습니다. 제가알기로 문자열의 끝부분에는 널문자를 둔다고 기억하는데 왜 이렇게 해도 되는지 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
전처리기 질문
#include <iostream> #include <algorithm> using namespace std; #define MY_NUMBER 333 #define MAX(a, b) (((a) > (b)) ? (a) : (b)) //#define LIKE_APPLE void doSomething() { #ifdef LIKE_APPLE cout << "Apple " << endl; #endif #ifndef LIKE_APPLE cout << "Orange" << endl; #define LIKE_APPLE doSomething(); return; #endif } int main() { doSomething(); //cout << MAX(1+3+4-3,2) << endl; //cout << std::max(1 + 3, 2) << endl; return 0; }위에서 doSomething()안에서 LIKE_APPLE이 정의되어있지 않았을 시, #define LIKE_APPLE로 정의를하고싶은데, 불가능한가요? GPT를 돌려도 원하는 답이 나오지 않아서,,,,
- 미해결홍정모의 따라하며 배우는 C++
min_score 질문
int main() { //const int num_students = 5; int scores[] = { 84,92,76,81,56 }; const int num_students = sizeof(scores) / sizeof(int); int max_score = 0; int min_score = 0; int total_score = 0; for (int i = 0; i < num_students; i++) { total_score += scores[i]; //max_score = (max_score < scores[i]) ? scores[i] : max_score; if (max_score < scores[i]) { max_score = scores[i]; } if (min_score > scores[i]) { min_score = scores[i]; } } double avg_score = static_cast<double>(total_score) / num_students; cout << max_score << endl; cout << min_score << endl; return 0; } 여기서 min_score값을 100으로 올리니까 값이 나오는데 min_score값을 왜 올려야 하는건가요??
- 미해결홍정모의 따라하며 배우는 C++
한글입력을 받을 수 없어요.
검색으로도 해결하지 못해 질문합니다 ㅠㅠㅠ다른컴퓨터로는 문제없이 되는데 주로 사용하는 컴퓨터는 이래서 너무 답답해요.
- 미해결홍정모의 따라하며 배우는 C++
Internal Linkage 질문
25:10 초 쯤부터Internal Linkage 에 대한 설명을 하십니다.int g_a = 1;이 Internal Linkage 로 개별 cpp파일 안에서만 전역변수처럼 작용한다고 하셨습니다. 그런데 그 후에 26분 쯤에서는static int g_a = 1; 에서 static이 이 변수가 다른 cpp파일에서 쓰이지 못하게 제한해준다고 하셨는데,이미 제한해줄 게 없이 이거는 이미 Internal Linkage 변수가 아닌가요..?static 이 없으면 파일 안에서만 전역변수가 되는 것이 아니라, 전체 파일에서의 전역변수가 되는 것이고 static이 있어야만 파일 내의 전역변수가 되는 건가요?이 부분을 여러번 돌려봤지만 너무 헷갈려서 질문 드립니다.
- 미해결홍정모의 따라하며 배우는 C++
4.2 헤더파일에서 extern을 초기화시킬 때
45분 31초쯤에 선생님께서,새로운 cpp 파일 Myconstants.cpp를 만드시고 그 안에extern const double pi(3.141592);extern const double gravity (9.8);이렇게 external linkage 전역 변수들을 초기화시키고,header file 안에는extern const double pi;extern const double gravity;이런식으로 선언만 해주셨습니다.이렇게 했더니, 헤더파일 안에 있는 pi를 가져가서 사용하는 서로 다른 cpp 파일에서의 pi의 메모리 주소가 같아졌습니다...여기서 헷갈리는 부분이 있습니다...물론 external 변수들은 꼭 초기화를 1번만 해주어야 한다는 사실은 이해하고 있습니다.그런데 왜 굳이 헤더파일에서 초기화를 시켜주지 않고 다른 cpp 파일에서 초기화를 시켜준 것인가요?제가 실험 삼아 선생님께서 하신 것과 그 반대로,다른 cpp 파일에서는 선언을 하고 헤더 파일에서는 초기화를 해주었습니다. 그랬더니 빌드할 때 error가 발생합니다...제가 한 방법과 선생님께서 하신 방법에 어떤 큰 차이가 있길래 한곳에서는 error 없이 잘 실행되고 나머지에서는 error가 발생하는 걸까요?ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
4.2 extern의 존재 유무
선생님께서 45분 쯤에 말씀하셨던 코드들을 좀 더 이해해보고 싶어서 이렇게 해보았습니다.<Header File constant.h>#pragma oncenamespace Constants {extern const double pi(3.141592);extern const double gravity(9.8); } <test.cpp>#include <iostream>#include "constant.h"void doSomething() {using namespace std;cout << "In test.cpp " << Constants::pi << endl;} <main.cpp>#include<iostream>#include "constant.h"using namespace std;void doSomething();int main() {cout << "In main.cpp file " << Constants::pi << endl;doSomething();return 0; } 여기서 궁금한 점이 헤더파일 안에 있는 const 변수들 앞에 extern이 없으면 아무런 문제가 없지만,extern을 붙이면 문제가 발생합니다..왜 extern을 붙이기만 하면 오류가 발생하는 것일까요...?extern linkage도 결국에는 전역 변수 중 하나인데 말입니다...
- 미해결홍정모의 따라하며 배우는 C++
4.2 전역 변수의 값을 바꿨을 경우
int a = 1;void doSomething() {++a;cout << a << endl;}int main() {int a = 10;doSomething();doSomething();doSomething();doSomething();}선생님께서 19분 38초 쯤에 이 코드에 관해서,<이런 식으로 int a = 10을 추가해 무의식적으로 a가 doSomething() 안에서 10이 출력되길 바랄 수 있는데 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다.그럼 바뀐 값이 doSomething()에서 출력되는 것>이라고 설명하셨습니다.그런데,선생님께서 설명하신대로라면, 바뀐 값이니 10, 11, 12, 13이 나와야 하는데,저 코드를 출력하면 2, 3, 4, 5가 출력됩니다...혹시 선생님께서 잘못 설명하신 걸까요?ㅠ그래서 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다는 설명도 헷갈립니다ㅠ
- 미해결홍정모의 따라하며 배우는 C++
char *name vs const char *name
안녕하세요,전자는 에러나고 후자는 ok인데, 그 이유가 "string literal은 constant array of chars이므로, pointer 또한 const이어야 한다"라고 다른 곳에서 설명을 봤습니다.(https://stackoverflow.com/questions/61601872/why-do-string-literals-char-in-c-have-to-be-constants)이 설명과 "기호적 상수"개념이 어떻게 연결될 수 있는지 궁금합니다. (사실 지금 예시에서 "기호적 상수"가 어떤 의미인지 제대로 모르겠습니다.)
- 해결됨홍정모의 따라하며 배우는 C++
연습문제 % 없이 풀 수 있나요?
제 기억엔 % 연산자를 배운 기억이 없어서요..!검색해서 풀기는 했는데 %연산자 활용하지 않고도 풀 수 있는 예제인가요?방법이 있다면 알고 싶습니다!!30분간 머리를 싸매고 풀어내긴 했는데, 이게 의도하신 연습은 아닌 것 같아서요..! 사실상 %를 풀어쓴 게 아닌가 싶기도 하고요..ㅠ
- 미해결홍정모의 따라하며 배우는 C++
fixed 관련 질문이 있습니다
#include <iostream> #include <iomanip> using namespace std; int main() { float x = 79; cout << showpoint << fixed << x << endl; cout << noshowpoint << x << endl; }showpoint를 쓰다가 noshowpoint 조정자를 쓰면 리셋돼서 소수점이 다시 출력되지 않는 것처럼 fixed도 리셋할 수 있는 방법이 있나요?
- 해결됨홍정모의 따라하며 배우는 C++
width()에 관련해서 질문 있습니다!
#include <iostream> #include <iomanip> using namespace std; int main() { int widthValue{ 4 }; char sentence[10]; cout << "Enter a sentence:\n"; cin.width(5); while (cin >> sentence) { cout.width(4); cout.fill('0'); cout << sentence << "\n"; cin.width(5); } }이 코드를 실행하면 공백 없이 sentence에 입력값을 넣었을 때는 출력값이 이해가 되는데 공백 포함해서 sentence에 입력하면 출력값이 이해가 안 돼요...! cout.width(4);가 4개를 출력하는데 sentence 배열에서 white space를 만나면 더 이상 출력을 안 하는 건가요? 왜 그런 건가요?
- 해결됨홍정모의 따라하며 배우는 C++
cin.ignore() 관련해서 질문이 있습니다!
#include <iostream> using namespace std; int main() { char str1[50]; char str2[50]; char str3[50]; cin.get(str1, 50); cout << "1: " << str1 << endl; //cin.ignore(); 첫 번째 ignore cin.get(str2, 50, '\n'); cout << "2: " << str2 << endl; //cin.ignore(); 두 번째 ignore cin.get(str3, 50, '\n'); cout << "3: " << str3 << endl; }cin.ignore()이 첫 번째 자리에 있을 때는 str2가 매개변수인 get이 '\n'을 무시하고 입력을 받는데 두 번째 자리에 cin.ignore()이 있을 때는 '\n'을 무시하지 않고 즉시 호출되고 끝납니다. 왜 이렇게 되나요?두 번째 자리에만 ignore()이 있을 때 cin.get(str2,50,'\n') 함수가 버퍼에 남아있는 '\n'을 받은 후에도 버퍼에 계속 남아 있나요?<실행 결과> (첫 번째 자리의 ignore만 있을 때) wendy 1: wendy irene 2: irene 3:<실행 결과> (두 번째 자리의 ignore만 있을 때) wendy 1: wendy 2: 3:
- 미해결홍정모의 따라하며 배우는 C++
3.7 연습문제
안녕하세요?선생님께서 내주신 연습문제 중에서10진수 93을 8비트 무부호 정수로 -93을 8비트 부호 정수로 바꾸는 문제를 내주셨습니다. 그런데93을 2진수로 바꾸면 1011 101 로 7비트로 나옵니다...8비트라는 것은 8자리라는 건데 이렇게 7자리로 나올 때는 어떻게 해야 하나요?아니면 제가 선생님의 의도를 잘못 파악하고 있는 걸까요?ㅠ마찬가지로,-93을 바꾸면 0100 011 이렇게 나옵니다ㅠ어떻게 해야 할까요?
- 미해결홍정모의 따라하며 배우는 C++
3.6 논리연산자 25:30초에 4번째 문제 관련하여 질문드립니다.
if ((14 > 13 || 2 > 1) && (9 > 1 ))에 대해 출력을 해봤습니다.저는 14>13은 false이고 2>1은 false이기 때문에 (14 > 13 || 2 > 1) 부분이 false가 돼서 정답은 false가 출력 될 것이라고 생각했습니다.그런데 정답은 true로 출력이 됩니다. 왜 이런지 알고 싶습니다!