월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C++
무한루프에서 초기화 관련 질문
4.4 반복문 while - 7:30 무한루프를 돌면 int count = 0; 이 계속 반복되는데, 어떻게 선언 및 초기화가 계속 반복될 수 있는 건지 이해가 잘 안 됩니다. 메모리에 대한 이해가 요구되는 문제인 것 같은데 알려주시면 감사하겠습니다 !
- 미해결홍정모의 따라하며 배우는 C++
입력받은 string이 출력되지 않는 문제에 대한 질문
이 코드를 실행해서 순서대로 jack jack 22 22 를 입력하면 이렇게 출력되는데 왜 22이 한 개만 출력되는 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
배열 메모리 크기 할당 오류
질문있습니다. 26:30 쯤에서 궁금한 것이 생겼습니다. 저는 지금까지 #include <iostream> using namespace std; int main(){ int num; cin >> num; int arry[num]; return 0; } 이런식으로 변수 값을 입력 받은 후 그 크기만큼 배열을 할당했습니다. 오류가 안 생겼던 것 같은데요... 홍정모님 강의에서는 오류가 발생한다고 해서요. 런타임 이전에 크기가 할당 되어야 한다는 말씀을 하셔서요
- 미해결홍정모의 따라하며 배우는 C++
const int&x를 넣어도 const int x 를 넣어도 값은 같이 나오는 것 같아서 질문합니다.
어떤 부분에서 더 효율적인 건가요? void doSomething(const int &x) //여기서 const int x 를 써서 참조 변수를 안 써도 값은 똑같은데 주소값이 저장되는 것 말고 차이가 있나요? 읽어주셔서 감사합니다. { cout << x << endl; } int main() { int a = 1; doSomething(a); doSomething(5); doSomething(a + 3); doSomething(3 * 4); const int &ref_x = 7 ; } return 0; }
- 해결됨홍정모의 따라하며 배우는 C++
질문
강의내용 9:30에 멤버변수 초기화하는 부분 질문드립니다. m_i, m_d, m_c는 잘 초기화 되는데 m_arr는 생성자 초기화 방법중 두번째 방법(아래에서 초기화)에서 에러가 뜹니다. 웬만해선 컴파일 에러보고 해결하는데 에러 설명을 봐도 ";가 필요합니다" 라고만 나와서 질문드립니다 class Something { int m_arr[5] {1,2,3,4,5}; .... 생략 public: Something() : m_arr{1,2,3,4,5} // 가능 { m_arr{1,2,3,4,5} // 불가능 m_arr[5]{1,2,3,4,5} // 불가능 } };
- 미해결홍정모의 따라하며 배우는 C++
doSomething 매개변수주소 질문
안녕하세요 교수님, 이번강의도 너무 잘들었습니다 감사합니다. 강의에서 소개해준 예제 코드를 따라서 작성한후 실행을했을때 한가지 의문점이 들었습니다. 교수님계서 매개변수는 함수의 기능이끝난후에는 OS에 메모리를 다시 반환한다고 언급하셨는데, 제 생각에는 OS에 메모리를 반환한후 다시 함수를 호출했을때에는 다른메모리주소를 사용해야하는데 함수를 실행할때마다 항상 같은 메모리주소를 사용하는것이 조금 의문입니다. 제가 잘못이해한것인지 궁금하네요. 질문 읽어주셔서 감사합니다 코드내용 #include <iostream> using namespace std; void doSomething(int y) { cout << "In func " << y << " " << &y << endl; } int main() { doSomething(5); int x = 6; cout << "In main " << x << " " << &x << endl; doSomething(x); doSomething(x + 1); }
- 미해결홍정모의 따라하며 배우는 C++
코딩이 오류가 납니다 ㅜㅜ
안녕하세요! 코딩하다가 오류가 해결이 안돼 질문 남깁니다. #include <iostream> using namespace std; int add(int x, int y) { return x + y; } int subtract(int x, int y) { return x - y; } int multiply(int x, int y) { return x * y; } int main() { int x, y; cin >> x >> y; int op; cout << "0: add, 1: subtract, 2:multiply" << endl; cin >> op; //1. static binding (early binding) /*int result; switch (op) { case 0: result = add(x, y); break; case 1: result = subtract(x, y); break; case 2: result = multiply(x, y); break; } cout << result << endl; */ //2. Dynamic binding (late binding) //함수의 포인터를 정의 하고, switch문으로 함수의 포인터에 함수를 직접 넣어준다. int(*func_ptr)(int, int) = nullptr; switch (op) { case 0: func_ptr = add; break; case 1: func_ptr = subtract; break; case 2: func_ptr = multiply; break; } cout << func_ptr(x, y) << endl; return 0; } 이렇게 코딩했는데, exception thrown 이라는 오류가 나오네요.. 구글링해봤는데 이부분에 대한 설명은 잘 안나온 것 같아서요! 혹시 어떤부분이 잘못됐는지 알려주실 수 있나요?
- 미해결홍정모의 따라하며 배우는 C++
내부클레스의 friend선언 중 errorC2511
안녕하세요, C++을 수강하는 타전공 학생입니다. 항상 양질의 강의와 수준높은 커뮤니티 질답에 감탄하며 감사히 수강하고 있습니다. 8.12 친구 함수와 클래스 friend강의의 마지막 부분에서 문득 한 클래스에만 friend 키워드를 쓰면 그 클래스의 내부 클래스에 저장된 private 멤버도 접근 가능하게 되는지 궁금해져서 다음과 같이 실험해보았습니다. #include <iostream> using namespace std; class A; // forward declaration class B { private: int m_value = 2; public: void doSomething(A& a, A::C& c); }; class A { private: int m_value = 1; public: // ---내부 클래스 C 추가---- class C { private: int m_value = 3; friend void B::doSomething(A& a, A::C& c); // 오류 발생! }; //-------------------------- friend void B::doSomething(A& a, A::C& c); // 오류 발생! }; void B::doSomething(A& a, A::C& c) { cout << a.m_value + c.m_value << endl; } int main() { A a; B b; A::C c; b.doSomething(a, c); return 0; } 클래스 A에 private멤버를 가진 내부 클래스 C를 추가하고 doSomething함수를 A와 C의 private멤버 둘다 사용하도록 조금 바꿨습니다. 주석 표시한 곳에 클래스 B내 doSomething멤버함수에 대한 선언이 incompatible하다는 오류가 발생합니다. 그리고 컴파일 해보니 어마어마한 컴파일에러가 나오는데, 근본적인 에러는 아래인거 같습니다. error C2511: 'void B::doSomething(A &,A::C &)': overloaded member function not found in 'B' 오버로드될 여지가 없어보이고, 함수이름, 파라미터를 토씨하나 안틀리고 복붙했는데.. 왜 이런 오류가 나는 걸까요? 위 오류가 난 두 줄을 friend class B;로 바꾸면 IDE상에선 오류가 없지만 여전히 위 컴파일에러가 뜨네요. 한편 궁금증으로 돌아가서, 첫 번째 오류 줄인 friend void B::doSomething(A& a, A::C& c);을 지워봤습니다. doSomething함수 내에서 A::C의 private멤버를 접근할 수 없다고 하는 것을 보니 내부 클래스 역시 따로 friend선언을 해주어야 하는거 같은데.. 오류가 떠서 확인할 수는 없었습니다.
- 미해결홍정모의 따라하며 배우는 C++
포인터 벡터에 대해 질문이 있습니다
class Lecture { private: vector<Student*>studnets; } 10분 40 초쯤에 선생님께서 Lecture class 가 사라지면 students instance 는 사라진다 하지만 student* 포인터가 가리키고 있는 원래 주소에 있는것들은 그대로 유지된다고 하셨는데 그렇다면 그 주소에 있는것들은 나중에 delete 을 사용하여 없애주어야하는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
int **mat = new int *[row] 제가 잘 이해한거 맞나요?
int **mat = new int *[row]; for (int r = 0; r < row; ++r) { mat[r] = new int[col]; } 이 부분이 이해하기 진짜 어려웠습니다.. 1번 봤을떈 이해가 안갔습니다 그래서 동적할당을 이해못해서 그런가해서 다시보고 생각하면서 코드 하나하나 다시 뜯어서 보고 다시 영상 보면서 코드를 보니까 아래처럼 이해를 했는데 이게 맞는걸까요? const int row = 3; const int col = 5; const int arr[row][col] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15} }; //출력하기 위해선 초기화를 해줘야됨 int **mat = new int *[row]; // int *[3]크기의 메모리 할당 / 초기화 //const int arr[row][col] ={1~15} 초기화 해주기 for (int r = 0; r < row; ++r) // 3반복 { mat[r] = new int[col]; //int *r1 = new int{1,2,3,4,5};처럼 초기화를 해야하는데 //하나하나 다 해줄 수 없으니 int *[5] 크기의 메모리 즉 [col]5개를 3번 반복해서 [r]에 1~15를 저장해줌 } for (int r = 0; r < row; ++r) // row 열 만들기 3 { for (int c = 0; c < col; ++c) // col 열 만들기 5 { mat[r][c] = arr[r][c]; //mat[0~2][0~4] } } //출력용 for (int r = 0; r < row; ++r) { for (int c = 0; c < col; ++c) { cout << mat[r][c] << " "; } cout << endl; } //delete for (int r = 0; r < row; ++r) { delete[] mat[r]; }
- 미해결홍정모의 따라하며 배우는 C++
다중포인터에서 문법이 이해가 안갑니다..
int *ptr = nullptr; int **ptrptr = nullptr; int va = 5; ptr = &va; ptrptr = &ptr; cout << ptr << " "<< *ptr<<" "<< &ptr<< endl; cout << ptrptr << " " << *ptrptr << " " << **ptrptr << " " << &ptrptr << endl; 이렇게 출력을 해보면 003FF784 5 003FF79C 003FF79C 003FF784 5 003FF790 003FF784 이렇게 나오는데 **ptrptr 에서 *ptr로 출력하는 부분이 이해가 잘 안됩니다.. 제가 이해한대로 설명하자면 *ptr부분은 ptr << *ptr << &ptr ptr은 va에 대입 했으니 va 주소값이 나오고 *ptr은 주소안의 있는 값이 나오는거니 5 나오고 &ptr은 자신 주소값이 나오고 **ptrptr 부분은 ptrptr << *ptrptr << **ptrptr << &ptrptr에서 ptrptr은 ptr에 대입했으니 그 ptr은 va에 대입했으니 va주소값 *ptrptr과 **ptrptr 부분이 이해가 안갔는데 이렇게 출력해보고 제 생각은 **ptrptr의*ptrptr를 출력했을떄 *ptr의 ptr과 같은 맥락이고 **ptrptr를 출력했을떄 *ptr과 같은 맥락이다..라고 이해했습니다 즉 *ptr == ptr 같고 **ptrptr == *ptr 같다 제가 이해한게 맞을까요??
- 미해결홍정모의 따라하며 배우는 C++
new로 할당받은 주소 출력해보고 delete한 후 또 출력하는거 안되는건가요?
int *ptr = new int{ 7 }; cout << ptr << endl; cout << *ptr << endl; delete ptr; cout << ptr << endl; cout << *ptr << endl; 이렇게 한번 출력후 메모리를 돌려 준 다음 다시 한번 출력해 보려는데 오류가 뜨면서 안되는데 버전 업데이트 되면서 막힌 건가요?? 19버전입니다 검색해보니 작년인가 재작년 까지 올라온 글들만 봐도 가능하더라구요 이게 막힌게 맞는건가요?
- 미해결홍정모의 따라하며 배우는 C++
7분쯤에 질문이있습니다
7분쯤에 선생님이 이런식으로 코딩을 해주셨는데 Mystring hello("Hello"); cout<<(int*)hello.m_data<<endl; { MyString copy=hello; cout<<(int*)copy.m_data<<endl; } 여기서 output 둘다 006AF320 로 같게 나오는데 m data 가 가지고 있는 값이 같다는건가요 아니면 m data 포인터의 주소값이 같다는 뜻인가요?
- 미해결홍정모의 따라하며 배우는 C++
연산자오버로딩 기초개념 강의가 따로 있나요?
안녕하세요? 차근차근 강의를 듣고있는데 operator + 라는 연산자오버로딩 개념이 설명없이 갑자기 튀어나와서 질문 올립니다. 혹시 operator + 개념이 따로 설명되어있는 강의가 있나요? 누락된 것인가 싶어서요
- 미해결홍정모의 따라하며 배우는 C++
입출력 연산자 작동 원리가 알고싶습니다
선생님이 설명해주신 입출력 연산자가 istream&operator>>(istream&in, Point&point) { } 이런식으로 생겼는데 istream&in 에서는 도대체 무얼 받는건가요? parameter가 있으면 무언가를 받아야하는데 cin>>p1>>p2 이런식으로 parameter 에 아무것도 안보네도 작동이 잘되서 parameter 에서 무엇을 어떻게 받는지 알려주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
구조체를 굳이 포인터나 참조를 해서 쓰는 이유가 있을까요??
Psrson person person.age =5; 이런식으로 쓸 수 있는데 사실 사용법도 비슷한데 굳이 포인터나 참조를 해서 사용하는 이유가 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
&로 매개변수로 받을경우 함수를 벗어나도 공유가 된다고 이해했는데
제가 전투방식을 간단하게 구현해봤는데 &를 매개변수로 넣을경우 같은 주소를 공유하여 함수를 벗어나도 그 값을 유지한다고 이해를 했는데 왜 제 코드는 값이 원래대로 초기화가 되었을까요.. 혹 제가 이해를 잘못하여 코드를 잘못작성한걸까요? void aet(const int &hp, const int &at) { int de = hp - at; cout <<"전사는 몬스터에게 "<< de<<"의 데미지를 입었습니다." << endl; de = hp; } struct At { string ne; int hp; int at; }; int main() { At at; at.ne = "전사"; at.hp = 80; at.at = 20; cout << "플레이어의 직업은 " << at.ne << " " << "HP:" << at.hp << " " << "공격력:" << at.at << endl; At mt; mt.ne = "몬스터"; mt.hp = 50; mt.at = 10; cout << mt.ne << "의 정보는 " << "HP:" << mt.hp << " " << "공격력:" << mt.at << endl; aet(mt.hp, at.at); cout << "****************************************************************************************" << endl; cout <<"현재 "<< at.ne << " " << "HP:" << at.hp << " " << "공격력:" << at.at << endl; cout << "현재 " << mt.ne << "의 정보는 " << "HP:" << mt.hp << " " << "공격력:" << mt.at << endl; return 0; } 이렇게 작성했습니다.. 현재 플레이어의 정보와 몬스터의 정보를 띄어주고 플레이어가 공격하는 함수를 만들어 매개변수로 몬스터의hp,플레이어의 공격력을 넣어주었고 de라는 변수에 몬스터의hp - 플레이어의 at(공격력)을 넣고 de라는 값을 다시 hp에 넣어주려고 한건데 디버그를 봐도 함수에서 몬스터의hp - 플레이어의 at 되어 de의 값은 30이 잘 되었는데 그 다음 de = hp; 이 부분에서 de 50 , hp 50 으로 바뀌네요.. 뭐가 문제일까요..
- 미해결홍정모의 따라하며 배우는 C++
int 와 char 의 차이
안녕하세요 강의 시청 중 int 와 char의 차이에 관해 궁금증이 생겨 질문드립니다. 강의에서 char은 아스키코드를 통해 정수로 데이터를 저장하므로 int 와 마찬가지로 사칙연산이 가능하고, 또 차이점은 같은 바이트에 이진수로 정수를 저장하지만 int 가 char보다 더 넓은 범위의 정수를 저장하는 것으로 배웠습니다. 여기서 좀 헷갈리는 것이 그럼 int 와 char 의 차이가 미묘합니다. char cValue = 69;// 아스키 코드 값을 저장하므로... cout<< cValue; //출력값 : E 위가 성립함은 이해가 갑니다. cout<< 'S' - 8; //출력값 : 75 그런데 이 윗줄의 출력값이 75의 아스키 넘버에 해당하는 K가 아닌 75가 출력될 수 있었던 이유가 궁금합니다. #질문에 참고한 링크입니다 1) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lsv400&logNo=100090853321 2)https://stackoverflow.com/questions/15869931/practical-difference-between-int-and-char
- 미해결홍정모의 따라하며 배우는 C++
괄호 안에서 선언 된거는 괄호 안에서만 효과가 있는거 아닌가요?
int apple = 5; 로 선언되고 괄호 안 apple = 1; 이 되면 괄호 바깥 맨 아래 마지막 cout << apple << endl; 에서 1이 나와야 되는거 아닌가요
- 미해결홍정모의 따라하며 배우는 C++
함수호출에 관한 질문이 있습니다
#include <iostream> using namespace std; class Something { private: int a; static int b; public: int temp() { return a=1; } static int getS() { return b; } }; int Something::b = 1024; int main() { Something s1; int (Something::*fptr)() = &Something::temp; cout << (s1.*fptr)() << endl; int(*fptr2)() = &Something::getS; cout << fptr2() << endl; } 제가 코드를 짜봤는데 여기서 temp의 주소를가지고 있는 함수를 포인터 fptr을 이용하여 함수호출을 하기위해선 dereference 를 사용하여 (s1.*fptr)()이런식으로 사용하였지만 왜 static 멤버 함수인 getS 를 호출할려면 dereference 를 하지 않아야하는건가요? 제 생각에는 getS의 주소를 지닌 fptr2포인터를 이용하여 함수 getS를 호출할려면 dereference 를 사용해주어야하는거 아닌가요?