월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 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 << "add : 1, sub : 2, multi : 3" << endl; cin >> op; 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; return 0; } #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 << "add : 1, sub : 2, multi : 3" << endl; cin >> op; 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; } 궁금한게 정적 바인딩 코드를 봐도 result의 값은 런타임에 op에 무엇을 넣느냐에 따라 달라지는데, 왜 이것 또한 정적인게 아닌지 궁금합니다. 즉, 이 둘의 명확한 차이점에 감이 안간다는 말 입니다.
- 해결됨홍정모의 따라하며 배우는 C++
왜 Stack은 작게 만들었는가..
안녕하세요. 덕분에 C++ 공부중인 학생입니다.궁금한 것이 있어 글을 쓰게 되었습니다.Stack이 더 빠르다면 애초에 크게 만들었으면 될 것을 왜 크기를 Stack은 작게 만들었고 Heap은 크게 만들었는지가 궁금하여 여쭤봅니다.떠오르는 이유는 물리적인 이유가 있는데,통신을 예로 들어서.. 전화가 잘 터지는 기지국 근처는 Stack , 잘 안터지는 먼 곳은 Heap 이 되는 것인가요?아니면 다른 이유가 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
for-each 반복문에서 값을 바꾸기 위해서..
선생님께서 레퍼런스를 사용하라고 하셨는데, 왜 저는 바뀌어서 출력되죠?ㅠㅠㅠ 아래 코드처럼 작성하면 정상적으로 10이 출력돼요... 항상 좋은 강의 감사합니다~ const int fibonacci[] = { 0,1,1,2,3,5,8,13,21,34,55,89 }; for (int number : fibonacci) { number = 10; cout << number; cout << endl; }
- 미해결홍정모의 따라하며 배우는 C++
소멸자 관련 질문드립니다.
강의: 8.6 소멸자 destructor / 약 8분30초 안녕하세요. 매번 강의를 잘 보고 있습니다. 강의를 보던 중, my_int_arr(1000)의 소멸자가 언제 호출되는지 궁금하여 질문드립니다. my_int_arr가 while문 영역을 벗어나면서 사라지려고 할 때 소멸자가 호출되서 delete이 된다고 하셨는데요, while의 조건문이 true이기 때문에 my_int_arr가 항상 while문 영역 내에 있는게 아닌지 궁금합니다. my_int_arr가 계속 while문 영역에 있으므로 소멸자가 호출되지 않을 것 같은데 실제로 delete이 되는걸 보니 제가 잘못알고 있는 부분이 있는 것 같습니다. while문의 바디를 다 처리하고, while 조건문의 참/거짓을 판단할 때 while문 영역을 벗어난 거라고 봐야하나요?
- 미해결홍정모의 따라하며 배우는 C++
4.1강 namespace 안에 void함수 cout, endl undefine
#include <iostream> namespace work1 { int a = 1; void dosomething() { (문제 의 줄)>> cout << a += 3 << endl; } } //(질문) //여기서 오류나와서 namespace에서 꺼내보아도 void 함수에서 cout,endl을 찾을 수가 없습니다. 구글검색도 해봤지만 알 수가 없었는데 혹시 제가 무엇을 놓친걸까요? int main() { using namespace std; work1::a; cout << work1::a << endl; work1::dosomething; cout << work1::a << endl; //cout << work1::dosomething << endl; return 0; }
- 미해결홍정모의 따라하며 배우는 C++
헤더파일에서 함수바디를 따로 저장했을때 디파인 오류 가 납니다.
강의 내용 대로 헤더파일에 함수의 바디까지 모두 작성했을때는 별다른 문제는 없었습니다. 저는 교수님께서 말씀하신대로 헤더와 바디를 나눠서 작성하는게 정석이라 하셔서 분리하여 보았습니다. 그리고 메인파일에서doSomThing.h 파일을 명시하고 add 함수를 호출했을때 헤더파일과 바디파일을 타고타고 쭉들어가서 문제없이 실행될꺼라 예상했습니 다. 하지만 이경우에 add 디파인 오류가 떳습니다. 왜 그런걸까요? main.ccp --- #include "doSomeThing.h" int main() { add(1,2); } doSomeThing.h --- //#pragma once void doSomeThing(); doSomeThing.ccp --- #include "add.h" void doSomeThing() { add(1, 2); } add.h --- //#pragma once int add(int a, int b); add.cpp --- int add(int a, int b) { return (a + b); }
- 홍정모의 따라하며 배우는 C++
[1.12 헤더가드가 필요한 이유] 헤드와 바디를 나눠서 시도했을때 오류에 대한 질문입니다.
삭제된 글입니다
- 해결됨홍정모의 따라하며 배우는 C++
이 코드 마지막에 스택에 남은 정보들 다 출력하려면 어떻게하죠???
#include <iostream> #include <string> using namespace std; template <class T> class DynStack { private: struct StackNode { T value; StackNode* next = NULL; }; StackNode* top; public: DynStack() { top = NULL; } void push(T); void pop(T &); bool isEmpty(); }; // Member function push pushes the argument onto // the stack. template <class T> void DynStack<T>::push(T num) { StackNode *newNode; // Allocate a new node & store Num newNode = new StackNode; newNode->value = num; // If there are no nodes in the list // make newNode the first node if (isEmpty()) { top = newNode; newNode->next = NULL; } else // Otherwise, insert NewNode before top { newNode->next = top; top = newNode; } } // Member function pop pops the value at the top // of the stack off, and copies it into the variable // passed as an argument. template <class T> void DynStack<T>::pop(T &num) { StackNode* temp; if(isEmpty()) { cout << "The stack is empty.\n"; return; } else // pop value off top of stack { num = top->value; temp = top->next; delete top; top = temp; } } // member funciton isEmpty returns true if the stack // is empty, or false otherwise. template <class T> bool DynStack<T>::isEmpty() { if (!top) return true; else return false; } class Inventoryltem { private: long serialNum; // Serial number string manufactDate; // Manufacture date int lotNum; // Lot number public: // Default constructor Inventoryltem() { serialNum = 0; manufactDate = ""; lotNum = 0; } // Constructor Inventoryltem(long s, string m, int lot) { serialNum = s; manufactDate = m; lotNum = lot; } void setSerialNum(long s) { serialNum = s; } void setManufactDate(string m) { manufactDate = m; } void setLotNum(int lot) { lotNum = lot; } long getSerialNum() { return serialNum; } string getManufactDate() { return manufactDate; } int getLotNum() const { return lotNum; } }; int main() { DynStack<Inventoryltem> stack;// create stack Inventoryltem item; Inventoryltem item; // create inventory item object int ch;// Menu choice long serial;// Serial number string mDate;// Manufacture date int lnum; //lot number do { cout << "1. add a part.\n"; cout << "2. remove a part.\n"; cout << "3. Quit.\n\n"; cout << "choose one of them(1,2,3): "; cin >> ch; // Validate choice while (ch < 1 || ch > 3) { cout << "invalid number. Enter one of 1, 2, 3: "; cin >> ch; }; // Act on the user's choice. switch (ch) { case 1: cout << "\nadding a new part...\n"; cout << "Enter the serial number : "; cin >> serial; item.setSerialNum(serial); cout << "Enter the manufacture date : "; cin >> mDate; item.setManufactDate(mDate); cout << "Enter the lot number: "; cin >> lnum; cout << endl; item.setLotNum(lnum); stack.push(item); break; case 2: if (stack.isEmpty()) { cout << "it's empty.\n\n\n"; break; } else stack.pop(item); cout << "\nremoving a part...\n"; cout << "\nThis part was removed.\n"; cout << "\tSerial number: " << item.getSerialNum() << endl; cout << "\tManufacture date: " << item.getManufactDate() << endl; cout << "\tlot number: " << item.getLotNum() << endl; cout << endl; break; case 3: cout << "\nRemaining parts : "; break; } } while (ch != 3); return 0; }
- 해결됨홍정모의 따라하며 배우는 C++
7.5 다양한 반환 값들 (15:00~) 예제 코드 수정 요청
안녕하세요. 여러개의 값을 반환하는 방법 중 하나로 구조체 반환 함수를 설명해 주셨는데요. 예시의 구조체 반환 함수 몸체에 return 문이 없습니다. 질문 게시판을 보니 이 코드 관련 질문이 반복되어 영상이 수정되면 좋을 것 같아 말씀드립니다. 좋은 강의 감사드립니다. // 강의에서 사용한 코드 struct S { int a, b, c, d; }; S getStrct() { S my_s{ 1, 2, 3, 4 }; return my_s; // *** 강의에 없는 코드 *** } int main() { S my_s = getStrct(); return 0; }
- 미해결홍정모의 따라하며 배우는 C++
3.5강 관계연산자 복습 중 생긴 질문입니다.!
강의 예제 중 d1과 d2이 가지는 차이의 값이 궁금해서 setprecision을 이용해서 소수점 아래까지 출력을 하려고 했습니다. 그래서 해보면 d1은 setprecision의 값이 13, d2는 setprecision의 값이 14 일때부터 소수점 아래 숫자들을 출력했습니다. 질문은 어떠한 기준때문에 13 또는 14라는 값부터 소수점을 길게 출력하는지가 궁금합니다. 답변 해주시면 감사하겠습니다.!!
- 미해결홍정모의 따라하며 배우는 C++
[20:05] private member
안녕하세요. 지난 강의에서 설명해 주실 때 access specifier는 지정이 따로 안되는 경우 default로 private 지정이 된다고 설명해 주셨는데. 선생님 말씀에 따르자면 class First에 있는 다른 클래스 Second sec의 경우에도 private으로 봐야할 까요? 그리고 main함수에 있는 first fir constructor가 실행이 되려면 Second sec이 초기화가 먼저 되야한다고 하셨는데, 그렇다면 class first에 멤버로 있는 Second sec constructor가 초기화 되면, class Second에 멤버가 있다면(ex int x, int y), 이 멤버 또한 자동적으로 초기화가 되는 건가요?? 이 순서대로 연쇄작용이 일어나는 건가요? first fr constructor 실행 -> class first member인 Second sec contructor실행 -> class Second member 초기화 -> class first의 constructor실행 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C++
5.2 조건문 if (13:21~) 예제 코드 수정 요청
안녕하세요. 예제 코드를 수정해야 할 것 같아 말씀드립니다. // 강의에서 사용한 코드 if (x >= 10) if (x >= 20) cout << "x is between 10 and 20 " << endl; 10 이상 20 이하 조건에 대한 코드이니 x >=20 이 아니라 x <= 20이 되어야 할 것 같습니다. 정말 좋은 강의를 만났다고 생각합니다. 감사하게 잘 보고 있습니다. ^^
- 해결됨홍정모의 따라하며 배우는 C++
형님 그 어떤 함수안에서 2차원배열 동적할당한다음에 해제할때요
삭제된 글입니다
- 미해결홍정모의 따라하며 배우는 C++
<< 오버로딩 시 const 유무에 따른 문제
안녕하세요 실습을 해보면서 << 연산자 오버로딩시 와 같이 Digit에 const 가 없으니 << 가 처음도 아닌 중간에서 에러가 났습니다. const 를 붙여주니 이 에러가 없어졌는데 어떤 이유에서 그런지 궁금합니다. 아래는 에러 코드 입니다. Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'Digit' (or there is no acceptable conversion)
- 미해결홍정모의 따라하며 배우는 C++
46:07 variab extern variable 주소관련
안녕하세요, 홍정모선생님. 다름이 아니라 Myconstants header파일에서 const double pi(3.1415); const double gravity(9.8); 상수를 초기화를 하고 main.cpp와 text.cpp extern Constants::pi 사용하여 external linkage를 하였을 때 동일한 변수(pi)의 메모리주소가 달랐습니다. 하지만 myConstants cpp파일 생성 후, MyConstants header파일에서는 변수만 선언하고(초기화안함), myConstant cpp 파일에서 변수 초기화를 하고 main.cpp와 test.cpp에서 사용하였을 때는 메모리 주소가 동일했습니다. 새로운cpp 생성 하나만으로 어떻게 주소가 동일해 질 수 있을까요??? cpp파일과 header파일에 구조적 차이가 있는 건가요??
- 미해결홍정모의 따라하며 배우는 C++
질문드립니다~
Cents(int cents = 0) { m_cents = cents; } int getCents() const { return m_cents; } int& getCents() { return m_cents; } 클래스 안에서 이렇게 3개씩이나 정의하는 이유가 무엇인가요?
- 미해결홍정모의 따라하며 배우는 C++
std::array function parameter data type 질문
배열의 경우 값을 call by value 로 하면 배열 전체를 복사해서 비효율적이잖아요. std::array 또한 함수 parameter 로 void fun_1(std::array<int, LEN> my_array); 이렇게 넘겨버리게 될경우 parameter 를 built in array 를 사용하는 것처럼 포인터로 넘어가는지 아니면 새로운 my_array 배열을 만들고 그 배열에 복사되는지 궁금합니다! buit in array 를 parameter 로 할 경우 void fun_2(int *array_ptr); 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
[2:31] 입출력 연산자 오버로딩을 friend로 사용하는 이유
안녕하세요. 교수님 바쁘실텐데 늘 꼼꼼히 봐주시는 교수님 감사합니다. friend 함수는 다른 class 안에 private 맴버를 접근하기 위해 사용하는 함수라고 배웠는데 입출력 연산자 오버로딩을 사용하기 위해서 friend를 꼭 사용해야 하나요? 입출력 연산자 오버로딩 앞에 friend를 지워보니 operator에서 "too many parameters for this operator function" 라는 오류가 납니다. 1. 위에 오류와 friend 함수를 꼭 사용하는 이유는 무엇인가요? 2. friend 를 지우고 사용할수 있는 방법은 없을까요? 3. friend를 지울수 있다면 맴버 접근을 instance를 사용하지 않고 접근할수있나요? (ex. point.m_x -> m_x) 늘 정성드런 답변에 감사드립니다!!
- 해결됨홍정모의 따라하며 배우는 C++
[1:50]복사생성자를 사용하는 이유
복사생성자 부분을 주석처리하고 Fraction frac(3,5); Fraction fr_copy=frac; 을 디버그해보니 클래스 안으로 들어가지도 않고 바로 복사가 됩니다. 이렇게 해도 복사가 바로 되는데 복사생성자를 사용하는 이유는 무엇인가요? (다음 강의를 보면 이해가 되는건가요?) 1차원적인 질문만 계속하니 쑥쓰럽네요.. 교수님 늘 감사드립니다.
- 미해결홍정모의 따라하며 배우는 C++
교수님! ArrayList!!
교수님 Java는 ArrayList나 , Hash Map을 유용하게 사용 하던데 C++에서도 구현이 가능한가요??