월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
질문이 있습니다
이 코드를 실행 시켰더니 마지막 문장은 안나오는데 왜그런걸까요?
- 해결됨홍정모의 따라하며 배우는 C++
질문이 있습니다
15번에 문제가 있다는 것 같은데 어떻게 해야할까요?? 알려주세요
- 미해결홍정모의 따라하며 배우는 C++
[10:30]class 정의 순서에 따른 에러
두 코드를 실행시켜 봤는데 class 정의 순서에 따라 friend키워드에 의한 에러 유무가 달라졌습니다.#include <iostream>using namespace std;class A;class B {private:int _val = 2;friend void print(A& a, B& b);public:void print(A& a);};void print(A& a, B& b) {cout << a._val << " " << b._val << endl;}class A {private:int _val = 0;friend void print(A& a, B&b);friend void B::print(A& a);};void B::print(A& a) {cout << a._val << endl;}int main() {A a;B b;print(a,b);return 0;}class B의 정의가 class A의 정의보다 위에 있는 이 코드는 에러가 나지 않았고요,#include <iostream>using namespace std;class B;class A {private:int _val = 0;friend void print(A& a, B&b);friend void B::print(A& a);};class B {private:int _val = 2;friend void print(A& a, B& b);public:void print(A& a);};void print(A& a, B& b) {cout << a._val << " " << b._val << endl;}void B::print(A& a) {cout << a._val << endl;}int main() {A a;B b;print(a,b);return 0;}class A의 정의가 class B의 정의보다 위에 있는 이 코드는 A::_val이 접근 불가하다는 에러가 났습니다.에러의 이유를 생각해 봤는데, friend키워드는 1번만 유효한 건가요? friend void B::print(A& a) 이후 처음으로 만나는 B::print 함수에 대해서만 friend처리를 해 준다는 인상을 받았습니다.
- 미해결홍정모의 따라하며 배우는 C++
질문)
#include <iostream> #include <limits>//numeric_limits<int>::lowest() #include <algorithm>//max() using namespace std; int main() { int fibonacci[] = { 0,1,1,2,30000000000,5,8,13,21,34,55,89 }; int max_num = std::numeric_limits<int>::lowest(); for (const auto& n : fibonacci) max_num = std::max(max_num, n); cout << max_num << endl; return 0; } 위 코드처럼 fibonacci array에 3,000,000,000 넣었더니, output이 89가 나옵니다.그래서 0을 하나 뺀, '300,000,000'을 해보니 output이 정상적으로 300,000,00을 출력합니다. 왜 그런건가요? stack메모리가 꽉차서 heap영역으로 동적할당해야하는건가요?
- 미해결홍정모의 따라하며 배우는 C++
행렬 덧셈 뺄셈 곱셈 코드를 작성해보았습니다. 코드리뷰 부탁부탁드립니다!
#include <iostream> using namespace std; //Matrix Size const int num_row_A = 2; const int num_col_A = 2; const int num_row_B = 2; const int num_col_B = 2; void printMatrix(int Mat_A[][num_col_A], int Mat_B[][num_col_B]) { /*print -> */ cout << "■Matrix A" << endl; for (int i = 0; i < num_row_A; ++i) { for (int j = 0; j < num_col_A; ++j) cout << Mat_A[i][j] << "\t"; cout << endl; } /*print -> B*/ cout << "■Matrix B" << endl; for (int i = 0; i < num_row_B; ++i) { for (int j = 0; j < num_col_B; ++j) cout << Mat_B[i][j] << '\t'; cout << endl; } return; } void Add_Matrix(int Mat_A[][num_col_A], int Mat_B[][num_col_B]) { cout << "■Add" << endl; for (int row = 0; row < num_row_A; ++row) { for (int col = 0; col < num_col_A; ++col) cout << Mat_A[row][col] + Mat_B[row][col] << '\t'; cout << endl; } return; } void Sub_Matrix(int Mat_A[][num_col_A], int Mat_B[][num_col_B]) { cout << "■Sub" << endl; for (int row = 0; row < num_row_A; ++row) { for (int col = 0; col < num_col_A; ++col) cout << Mat_A[row][col] - Mat_B[row][col] << '\t'; cout << endl; } return; } void Mul_Matrix(int Mat_A[][num_col_A], int Mat_B[][num_col_B]) { cout << "■Mul" << endl; for (int i = 0; i < num_row_A; ++i)// <2 { for (int j = 0; j < num_col_B; ++j) // <2 { int result = 0; for(int k=0; k<num_row_B;++k) result += Mat_A[i][k] * Mat_B[k][j]; cout << result << '\t'; } cout << endl; } } int main() { //Defined Matrix A,B int Matrix_A[num_row_A][num_col_A] = { 1,2,3,4 }; int Matrix_B[num_row_B][num_col_B] = { 5,6,7,8 }; //Print Matrix A,B printMatrix(Matrix_A, Matrix_B); /*-------------------------구분----------------------*/ cout << "----------------------------------------------" << endl; /*-------------------------구분----------------------*/ //Add Add_Matrix(Matrix_A, Matrix_B); //Subtaction Sub_Matrix(Matrix_A, Matrix_B); //Multiplication Mul_Matrix(Matrix_A, Matrix_B); return 0; } 소요시간은 약 2시간 걸렸습니다. 다른건 쉬운데, 행렬곱셈 코드를 작성하는 데에만 시간을 모두 할애했네요..어떤 점이 좋았는지, 비효율적이고 잘못되었는지 따끔한 지적 정중히 부탁드립니다! (일부터 행렬 곱,덧,뺄 셈의 예외는 처리하지 않았습니다! )(2x2 3x3과 같이 행과 열이 같은 행렬끼리의 연산으로만 봐주세요!)
- 미해결홍정모의 따라하며 배우는 C++
else if 문 질문
else if 문을 언어적의미로 접근해보면if : 만약 이거면else if : 또 다른 조건 제시 인데 그냥 if 문을 두개 쓰는거랑 if~else if 문을 쓰는거랑 큰 차이가 있나요?
- 미해결홍정모의 따라하며 배우는 C++
선택정렬 강의 보기 전 작성한 코드 리뷰 부탁드립니다.
강의에서 교수님께서 작성한 코드가 알고리즘 적으로 그리고 가독성 면에서도 뚜렷하다고 생각합니다.Q1.제가 작성한 코드의 문제점과 잘한 점은 어떤 것일까요??교수님 코드는 가장 작은 value의 Index를 startIndex에 Assignment하였고, 저는 {3,5,2,1,4}의 모든 수를 startIndex 기준으로 모두 탐색하였습니다.따끔한 지적 부탁드립니다!
- 해결됨홍정모의 따라하며 배우는 C++
14:00 부근 질문 있습니다.
강의에서 getValue()가 static 이어야하는 건 instance를 선언하기 전에 사용하기 위해서였고 instance가 선언이 되었다면 static이 아닌 getValue() 에서도 private인 static member variable에 접근가능했습니다.그런데 14:00 부근에서 교수님 설명에 따르면 static member variable을 초기화하려면 생성자가 static 이어야 한다고 하는데 왜 그런지 이해가 잘 가지 않습니다. 이전 강의에서 인스턴스가 선언될 때 member variable이 선언이 쓰레기값으로 먼저 되고 그 다음에 생성자 함수가 호출되는 것으로 알고 있는데 그렇다면 생성자가, 즉 함수가 static이 아니어도 상관없는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
형변환 우선순위
17분 37초에 설명하신 형변환 우선순위 관련해서 질문 드립니다.unsigned int 보다 long 이 우선순위가 높다고 되어서cout << 5u-10l << endl; 을 실행시켜보았는데long 이 우선순위가 더 높기 때문에 -5가 나와야 되지 않나요?
- 해결됨홍정모의 따라하며 배우는 C++
2:50 부근에서 질문있습니다.
main() 에서는 Something::s_value가 private이어서 접근이 안됐는데 똑같이 class 외부에서 int Something::s_value = 1024; 는 왜 가능한가요?
- 미해결홍정모의 따라하며 배우는 C++
정적변수 질문
dosometihng 내에서 선언된 정적변수는 메모리를 할당 받은 후 dosomething 함수가 종료될때 메모리를 반납했다가. 다시 함수를 만날때 이전 기록을가지고 메모리를 할당받는건가요?아니면 메모리를 반납을 아예 안하는건가요?
- 미해결홍정모의 따라하며 배우는 C++
구구단 코드 리뷰 부탁드립니다!
(사진)
- 미해결홍정모의 따라하며 배우는 C++
bitset<>() 은 정수형 변수에만 적용되나요?
bitset<>() 이 단순하게 메모리에 저장된 bit 를 보여주는 함수라고 생각했는데 float 형 변수 몇개를 사용해보니 전부다 00000..000000이 나와서 질문 드립니다.
- 미해결홍정모의 따라하며 배우는 C++
영상 마지막 부분에 내주신 과제물 풀어보았습니다. 코드리뷰 해주시면 정말로 감사드리겠습니다!
무엇을 잘했는지 그리고 어떤 부분을 잘 못했는지 따끔하게 지적 부탁드리겠습니다! [조금 더 나아가 홀수와 짝수를 분리시켜 출력하는 구구단 코드를 작성했습니다.] 1.구구단(홀,짝 구분 / while문 사용) #include <iostream> using namespace std; int main(){ cout << "Multiplication Table" << endl; int N; cin >> N; int num1=1, num2=1; while (num2<=9) { num1 = 1; while (num1 <= N) { //even num => print if (num1 % 2 == 0) { cout << num1 << '*' << num2 << '=' << num1 * num2 <<'\t'; } num1++; }cout << endl; num2++; } cout <<'\n'<< endl; num2 = 1; num1 = 2; while (num2 <= 9) { num1 = 2; while (num1 <= N) { //odd num => print if (num1 % 2 == 1) { cout << num1 << '*' << num2 << '=' << num1 * num2 << '\t'; } num1++; }cout << endl; num2++; } return 0;} 2. (1)번 문제를 goto문으로 변경해보았습니다.(main함수만 첨부) int main() { cout << "Multiplication Table" << endl; int N; cin >> N; int num1=1, num2=1; /*Even Number*/ goto tryAgain_2;tryAgain_1: // label 1 { tryAgain_2: // label 2 { if (num1 % 2 == 0) {cout << num1 << '*' << num2 << '=' << num1 * num2 << '\t';} num1++; if (num1 <= N) {goto tryAgain_2;} } cout << endl; num1 = 1; num2++; if (num2 <= 9) {goto tryAgain_1;} } cout << endl; num1 = 2; num2 = 1; /*Odd Number*/ goto tryAgain_4;tryAgain_3: // label 3 { tryAgain_4: // label 4 { //Even num_print if (num1 % 2 == 1) { cout << num1 << '*' << num2 << '=' << num1 * num2 << '\t'; } num1++; if (num1 <= N) { goto tryAgain_4; } } cout << endl; num1 = 2; num2++; if (num2 <= 9) { goto tryAgain_3; } } /*------------------------------------------숫자 직각 삼각형----------------*/3.작은 수 부터 출력하는 직각삼각형 int main(){ using namespace std; int N; cout <<"Number of Line: "; cin >> N; cout << endl; int count_outer = 1; while (count_outer <= N) { int count_inner = 1; while (count_inner <= count_outer) { cout << count_inner++ << " "; }cout << endl; count_outer++; } return 0;} 4.(3)을 역으로 하여 큰 수 부터 출력하는 직각삼각형 int main(){ using namespace std; int N; cout <<"Number of Line: "; cin >> N; cout << endl; int count_outer = 1; while (count_outer<=N) { int count_inner = N; while (count_inner >= count_outer) { cout << count_inner-- << " "; }cout << endl; ++count_outer; } return 0;}
- 미해결홍정모의 따라하며 배우는 C++
nonstatic 멤버 함수의 포인터 질문
#include <iostream>using namespace std;class Some {private: static int val_; int val2_=2;public: static int getVal() { return val_; //return val2_; } int temp() { return this->val_+this->val2_; }};int Some::val_ = 1;int main() { Some s1; int (Some:: * ptr)() = &Some::temp; cout << ptr << endl; cout << (s1.*ptr)() << endl; return 0;}안녕하세요.위의 코드를 실행시켰을 때 13이라는 결과가 나왔는데요,ptr을 출력했을 때 1이 나왔습니다.왜 ptr출력시 1이란 값이 나오는 걸까요? ptr만 출력했기 때문에 혹시 주소가 나올까 생각했는데 값이 나왔고, 또 왜 1이란 값이 나왔는지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
[4:00]static 멤버 변수의 초기화에서 문득 궁금해진 점
class Some {public: static int _val;};int Some::_val = 1; 마지막 줄인 int Some::_val = 1; 에서 앞에 int가 붙는 이유는 무엇인가요?Some이라는 클래스 안의 _val이라는 int형 멤버 변수라는 것으로 충분히 의미가 전달될 수 있는데, 앞에 int를 붙여서 변수 선언 과정처럼 초기화해야 하는 이유가 뭘지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
[16:00]함수가 const인지 아닌지로 overloading을 하는 게 맞나요? +코드 오류 질문
#include <iostream>#include <string>using namespace std;class Some {public: string _val = "default"; const string& getVal() const { cout << "const version" << endl; return _val; } string& getVal() { cout << "non-const version" << endl; return _val; }};int main() { Some some; some.getVal(); const Some some2; some2.getVal(); return 0;}[질문 1]some.getVal()과 some2.getVal()같이 오버로딩이 가능한 것이,함수가 const인지 아닌지로 구분을 했기 때문인지아니면 return type이 const인지 아닌지로 구분을 했기 때문인지 궁금합니다.[질문 2]return type으로는 오버로딩을 할 수 없기 때문에 질문 1의 답은 전자라고 추측하고 확인을 하기 위해 코드를 아래와 같이 바꿔 봤습니다.(7번째 줄을 const string& getVal() const에서 string& getVal() const 로 바꿔 본 것밖에 없습니다.)#include <iostream>#include <string>using namespace std;class Some {public: string _val = "default"; string& getVal() const { cout << "const version" << endl; return _val; } string& getVal() { cout << "non-const version" << endl; return _val; }};int main() { Some some; some.getVal(); const Some some2; some2.getVal(); return 0;}다음과 같이 바꿨을 때 string& getVal() const cout << "const version" << endl; return _val; }의 return _val부분에서 'qualifiers dropped in binding reference of type "std::strung &" to initialer of type "const std::string" '이라는 오류가 났습니다. 오류의 원인이 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
컴파일러가 함수를 찾는 범위에 대한 질문
컴파일러가 함수를 찾는 범위에 대해서 궁금합니다.만약 Project1에 source.cpp 파일에 add라는 함수가 사용이 되면 컴파일러는 메모리에 있는 add 함수를 찾는데 이 범위가 프로젝트 안에 있는 모든 .h 파일과 .cpp파일에 있는 함수들 인가요?자바, 파이썬과 달리 헤더파일도 있고, 프로젝트 구조로 되어 있고, 객체 지향을 맛보기만 했더니 class안에 있는 함수를 static으로 선언해서 갖고 오는 방식도 있고.. C++는 여러모로 다른 언어들과 다른 것 같은데 지금은 이해가 안가지만 배우다 보면 이런 것들이 전부 이해가 가겠죠..??추가질문)아래 질문을 보고 든 생각인데 다른 언어들은 namespace라는 기능이 없고 class로 구분을 하는데 왜 굳이namespace이라는 기능을 만든 것인가요? napespace와 달리 class는 만드는 데 좀 더 복잡하고 메모리를 더 많이 잡아먹나요? int a; 선언만 하고 초기화를 하지 않고 출력을 하면 에러가 뜨는데 애초에 int a; 선언을 문법적으로 오류가 있는 상태라고 보면 안되는 건가요??아래와 같이 int a; 가 어디에 선언 된지에 따라서 a가 출력되기도 하고 오류가 뜨기도 하는데 이 이유가 궁금합니다. int main() { int a; cout : a << endl; } # 오류가 발생 int a; int main() { cout : a << endl; } # 오류가 나지 않고 a = 0 으로 출력
- 미해결홍정모의 따라하며 배우는 C++
파일정리 챕터폴터별로 정리할때 에러
위 사진처럼 파일들을 폴더별로 정리해도 탐색기에서는이렇게 풀어서 정리됩니다.그래서 이렇게 폴더 하나에 묶어 넣어 실행해봤지만 솔루션에서 파일들을 찾을수가 없습니다.ㅠㅠ혹시 탐색기에서도 깔끔하게 정리할 수 있는 방안이 있나요??
- 미해결홍정모의 따라하며 배우는 C++
전방선언에 대한 질문이 있습니다.
함수를 전방선언 한다면 해당 함수와 일치하는 것들을 해당 프로젝트에 있는 .cpp, .h 파일들에서 찾는 방식으로 작동되는 것인가요?