월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
생성자 초기화
Fraction(const int& num_in = 1, const int& den_in = 1) { m_numerator = num_in; m_denominator = den_in; } q1. 생성자 초기화를 매개변수 모두 해주면 기본생성자 역할도 한다는 말씀이 이해가 잘안가서요
- 미해결홍정모의 따라하며 배우는 C++
[13:37] throw, catch문에서 auto casting이 안되는 예와 관련된 설명 문의
안녕하세요, 항상 질문 답변해주셔서 감사드립니다. 강의 중 auto casting이 안되는 예에 대해서 아래와 같은 코드를 이용해 설명해주셨습니다. try { //if (x < 0.0) throw std::string("Negative input"); if (x < 0.0) throw "Negative input"; cout << std::sqrt(x) << endl; } catch (std::string error_message) { //do something to respond cout << error_message << endl; } 교수님께서는 문자열에 마우스를 올리시면서 "Negative input"에 대해 'const char *'라고 말씀을 하시는데요, 저도 이전 강의들을 통해서 문자열은 'const char *'에 저장된다고 알고 있었습니다. 하지만 정작 마우스를 올려보면 아래와 같이 표현이 됩니다. (const char[15])"Negative input" 실제로 아래와 같이 코드를 구성해서 테스트를 해보면 에러가 발생하는데요, try { if (x < 0) throw "Negative input"; cout << std::sqrt(x) << endl; } catch (const char error[]) { cout << "const char array" << endl; cout << error << endl; } catch (const char *error) { cout << "const char pointer" << endl; cout << error << endl; } error C2312: 'const char *': is caught by 'const char []' 최종적으로 질문은 'const char *'와 'const char[]'은 throw, catch문에서 같은 것으로 인식되는지 궁금하고 혹시 이유에 대해 설명해주시면 감사하겠습니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
something::_init something::s_initializer;
something::_init something::s_initializer; q1. static 변수를 초기화 할때, 파일영역에 something::_init something::s_initializer; 선언하셨는데요. 어떻게 해석해야하는지 모르겠어요 ㅜ something::_init 과 something::s_initializer; 두개가 합쳐진건가요?
- 미해결홍정모의 따라하며 배우는 C++
소멸자
~intarray() { if (m_arr != nullptr) delete[] m_arr; } q1. 소멸자 생성하실때 if문 조건에 nullptr이 아닐때 delete 발생하는지 모르겠습니다.ㅠ
- 미해결홍정모의 따라하며 배우는 C++
비쥬얼 스튜디오 오류
비쥬얼 스튜디오가 오류가 나는 듯 합니다. 코드에 오류나 문제는 없는것 같은데 출력값이 안나오네요... While.cpp 파일에서 Ctrl+F5했는데 이진수.exe가 실행된걸 보면 파일에 관한 문제 같은데.. 뭐가 문제일까요?
- 미해결홍정모의 따라하며 배우는 C++
생성자 초기화 vs 함수 초기화
q1 클래스내부에서요 변수를 클래스로 초기화 하는것과 함수로 set함수로 초기화하는것이 다른 차이가 있나요?
- 미해결홍정모의 따라하며 배우는 C++
cout double 출력
cout으로 double형 변수를 출력하면 왜 6자리까지 안나오나요? printf("%lf")로 하면 소수점 6자리까지 출력이돼요. cout.precision()을 쓸 수 없는 상황에서 double형 정수를 소수점 6자리까지 출력하려면 어떻게 해야하나요?
- 미해결홍정모의 따라하며 배우는 C++
Fraction frac
Fraction frac는 class를 인스턴스화한건데요 Q.1생성자 함수 호출이라고 하는 이유가 있나요?? 7: 42분입니다.
- 미해결홍정모의 따라하며 배우는 C++
클래스 vs 생성자
class Fraction { private: // 분자. int m_numerator; // 분모. int m_denominator; public: //해결책1. 기본생성자 만들어 두면 된다. Fraction() { m_numerator = 1; m_denominator = 1; } }; int main() { Fraction frac; frac.print(); } Q1. 클래스를 인스턴스인 frac를 생성자로 부르는 이유가있나요? Q2 생성자에 매개변수가 있으면 ()를 붙여야하난고 하셨는데요 ()를 클래스 인스턴스인 frac에 붙여야한다는 말씀이신가용?? ㅠ
- 미해결홍정모의 따라하며 배우는 C++
궁금합니다
안녕하세요 reference로 함수인자를 전달할때 L-val 이면 &로 R-val이면 &&로 받는걸로 알고있습니다 그런데 const type & val 로 받아도 R-val 처럼 작동을 하는것 같은데 이건 코딩 스타일에 따라 나눠지는건가요? void f(int &&r) void f(const int&r)이 두개 다 있을때 &&인자를 가지는 함수가 호출되는것으로 알고있습니다
- 미해결홍정모의 따라하며 배우는 C++
int *& ptr_ref
void function_ptr_ref(int*& ptr_ref) { cout << *ptr_ref << endl; *ptr_ref = 3; } Q1: *& 써야하는 이유 있나요? Q2:int*& ptr_ref 와 int* ptr_ref 두 문법상 차이가 있나요? Q3: 값을 함수 리턴이아니라 바로 포인터로 변수에 전달하고 싶을 때 쓰는건가요? Q4. void function_ptr_ref(int*ptr_ref) { cout << *ptr_ref << endl; *ptr_ref = 3; } 이렇게 그냥 포인터로 매개변수를 사용하는 것과 다른 점 이 있나요?? ㅠㅠㅠㅠㅠ 잘모르겠어요 main함수의 변수에 영향을 줄 수 있는건 똑같은데용 ㅠ
- 미해결홍정모의 따라하며 배우는 C++
공변 반환값 관련 질문 있습니다
8:10 에서 b의 포인터를 내부적으로 a 포인터로 바꿔서 print()를 호출한다고 하셨는데, ref의 자료형은 A지만 A의 getThis() 는 virtual 이므로 B의 포인터가 반환되었고, B의 print()를 호출하려 했지만 A의 print()가 virtual 이 아니라서 B 대신 A의 print()가 호출된 게 맞나요?
- 미해결홍정모의 따라하며 배우는 C++
std::cin.ignore 작동원리 질문
안녕하세요! 항상 좋은강의/답변 감사드립니다. std::cin.ignore 작동원리에 대해서 질문드립니다. 1) cin >> x; 에서 사용자가 임의의 입력값을 넣는다 ex) 123 456 789 엔터 2) x에는 123이 대입 되고(띄워쓰기 전까지), 엔터를 만났으므로 std::cin.ignore(32767, '\n'); 에 의해 '\n' 전까지 나머지 456 789 가 무시된다(버퍼에서 사라진다) 3) 버퍼에서 사라졌으므로, 다음 cin에는 초기화 된 상태에서 값을 입력할 수 있게된다. 제가 제대로 이해하고 있는것이 맞나요?
- 미해결홍정모의 따라하며 배우는 C++
sinout cosout
//7.4 주소에 의한 인수전달 call by address #include <iostream> using namespace std; //sinout cosout을 포인터로 구현하기 void sinout_cosout(double degrees, double* sin_out, double* cos_out) { // main 함수에 값이 바뀐다. *sin_out = 1.0; *cos_out = 2.0; } int main() { // sin cos double degrees = 30; double sin= 10.0, cos = 20.0; cout << sin << " " << cos << endl; sinout_cosout(degrees, &sin, &cos); cout << sin << " " << cos << endl; return 0; } Q.1 참조에 의한 값 전달도 아닌데 함수에서 sin cos 값이 1.0과 2.0으로 바뀐다고 main 함수에서 값이 바뀌는 이유가 궁금해요
- 미해결홍정모의 따라하며 배우는 C++
vector 초기화
이차원 vector 초기화 할때 전역변수로 vector<vector<int>> m; 선언 후 main에서 m= vector<vector<int>>(n,vector<int>(n,0)); 이렇게 초기화 했더니 안돼요 왜 그런가요?
- 해결됨홍정모의 따라하며 배우는 C++
[13:30] 구조체 안에 구조체 초기화 하기
안녕하세요! 항상 좋은 강의 감사드립니다. struct Family{ Person me, mom, dad; }; 구조체 안에 구조체를 선언하고, 메인 함수에서 초기화를 하려고 하는데 Family my_family; //Family 구조체 변수 선언 my_family.mom{3.0, 150, 54, "my mom"};으로 초기화가 안되네요. (Person me{ 2.0, 100.0, 20, "John coder" }; 처럼요) my_family.mom.age = 54; 같이 개별로 초기화는 가능한 것 확인했는데 말이죠..
- 미해결홍정모의 따라하며 배우는 C++
구현해본 코드입니다! 피드백을 받고 싶어 올려봅니다 (+부족하지만 참고하실 분들 있으시면 조금이라도 도움드리고자 올려봅니다!)
강의 정말 잘듣고 있습니다. 대학교에 입학한 후 코딩을 처음 배운게 파이썬이었고, 파이썬으로 스타트업에서 머신러닝 프로젝트도 하면서 여러 사람들과 협업하기도 하며 나름 객체지향에 대해서 잘 알고 있다고 생각했는데, 교수님의 강의를 듣고 C++로 객체지향을 배워보니 그동안 제가 얼마나 기초가 부족했는지 알 수 있었습니다. 교수님 강의를 듣기 전까지 1년 이상 코딩에서 재미를 찾지 못하여 손을 놨었습니다. 그런데 이 강의에서 제가 모르는지도 몰랐던 것들을 알게되니 정말 감회가 남다르고, 다시 코딩이 재밌어졌습니다!^^ 정말 감사합니다! 최근에는 클린 코드와 클린 아키텍쳐에 대해서도 같이 공부하면서 교수님이 말씀하시는 정돈되고 읽기 좋은 코드가 무엇인지 조금씩 공부하고 있습니다. 나름 클린하게 구현해보려고 노력하면서 수업 따라가고 있습니다! 현재 군대에서 교수님 강의를 듣고 있는데, 교수님덕분에 제 꿈을 다시 일으키고 기반을 제대로 닦을 수 있을 것 같습니다! 남은 강의도 성실하게 듣겠습니다! 누구든지 피드백 해주시면 정말 감사하겠습니다! 또 혹시나 구현이 어렵거나 하신 분들을 위해 코드 공유합니다. #include <iostream> #include <initializer_list> #include <cassert> using namespace std; class IntArray { private: int m_length = 0; int *m_data = nullptr; const int one_digit = 1; public: IntArray(const unsigned int &len_in) : m_length(len_in) { initialize(m_length); } IntArray(const initializer_list<int> &list) : IntArray(list.size()) { int count = 0; for (auto & element : list) { m_data[count] = element; count++; } } ~IntArray() { delete [] m_data; } void initialize(const unsigned int &len_in) { m_data = new int[len_in]; } void reset() { delete [] m_data; m_data = nullptr; m_length = 0; } void resize(const unsigned int &len_in) { IntArray temp(len_in); copyAll(temp, *this); resetAndAssignment(temp); } void insertBefore(const int &value, const int &ix) { IntArray temp(m_length + one_digit); copyOriginalFromZeroToIx(temp, *this, ix - one_digit); temp.setValue(value, ix); copyOriginalFromIXToEnd(temp, *this, ix + one_digit, ix); resetAndAssignment(temp); } void remove(const int &ix) { IntArray temp(m_length - one_digit); copyOriginalFromZeroToIx(temp, *this, ix - one_digit); copyOriginalFromIXToEnd(temp, *this, ix, ix + one_digit); resetAndAssignment(temp); } void push_back(const int &value) { IntArray temp(m_length + one_digit); copyAll(temp, *this); int temp_end_index = temp.getLength() - one_digit; temp.setValue(value, temp_end_index); resetAndAssignment(temp); } void copyAll(IntArray & target, const IntArray & orginal) { for (int i = 0; i < target.m_length; ++i) { target.m_data[i] = orginal.m_data[i]; } } void copyOriginalFromZeroToIx(IntArray & target, IntArray & original, const unsigned int & to_ix) { // TODO: 방어적 프로그래밍 - to_ix가 배열 길이를 벗어날 때. for (int i = 0; i < to_ix + one_digit; ++i) { target.m_data[i] = original.m_data[i]; } } void copyOriginalFromIXToEnd(IntArray & target, IntArray & original, const unsigned int & from_ix_target, const unsigned int & from_ix_original) { // TODO: 방어적 프로그래밍 - to_ix가 배열 길이를 벗어날 때. unsigned int count = from_ix_original; for (int i = from_ix_target; i < target.getLength(); ++i) { target.m_data[i] = original.m_data[count]; count++; } } void resetAndAssignment(IntArray & intarray) { this->reset(); *this = intarray; } int getLength() { return m_length; } void setValue(const int &value, const int &ix) { //TODO: 방어적 프로그래밍 - 인덱스가 배열 범위를 벗어날 때 m_data[ix] = value; } IntArray& operator = (IntArray & source) { this->m_length = source.m_length; this->m_data = new int[this->m_length]; copyAll(*this, source); } friend ostream& operator << (ostream& out, IntArray & intarray) { for (int i = 0; i < intarray.getLength(); ++i) { out << intarray.m_data[i] << " "; } return out; } }; int main() { // constructor test - OK IntArray my_arr{ 1, 3, 5, 7, 9 }; cout << "constructor test: " << endl; cout << my_arr << endl; // resize test - OK my_arr.resize(8); cout << "resize test: " << endl; cout << my_arr << endl; cout << "Length: " << my_arr.getLength() << endl ; my_arr.resize(3); cout << my_arr << endl; cout << "Length: " << my_arr.getLength() << endl; // copyOriginalFromZeroToIx test - OK IntArray arr1{1, 3, 5, 7 ,9 }; IntArray arr2{2, 4, 6, 8, 10}; arr1.copyOriginalFromZeroToIx(arr1,arr2,2); cout << "copyOriginalFromZeroToIx test: " << endl; cout << arr1 << endl; // copyOriginalFromIXToEnd - OK IntArray my_arr1{100, 200, 300, 400, 500}; my_arr1.copyOriginalFromIXToEnd(my_arr1,arr2,2,2); // 100 200 6 8 10 OK cout << "copyOriginalFromIXToEnd: " << endl; cout << my_arr1 << endl; //insertBefore test - OK IntArray my_arr3{ 1, 3, 5, 7, 9 }; my_arr3.insertBefore(10, 1); // 1, 10, 3, 5, 7, 9 cout << "insertBefore test: " << endl; cout << my_arr3 << endl; // remove test - OK my_arr3.remove(3); // 1, 10, 3, 7, 9 cout << "remove test: " << endl; cout << my_arr3 << endl; // push_back test - OK my_arr3.push_back(13); // 1, 10, 3, 7, 9, 13 cout << "push_back test: " << endl; cout << my_arr3 << endl; /* result: constructor test: 1 3 5 7 9 resize test: 1 3 5 7 9 0 1041 0 Length: 8 1 3 5 Length: 3 copyOriginalFromZeroToIx test: 2 4 6 7 9 copyOriginalFromIXToEnd: 100 200 6 8 10 insertBefore test: 1 10 3 5 7 9 remove test: 1 10 3 7 9 push_back test: 1 10 3 7 9 13 */ return 0; }
- 미해결홍정모의 따라하며 배우는 C++
[13:00] class 자체를 explicit instantiation 하는 경우 class 키워드가 없어도 문제가 발생하지 않습니다.
안녕하세요, 함수의 정의 부분을 header 파일에서 cpp파일로 분리하는 과정에서 필요한 explicit instantiation에 대한 질문입니다. 강의에서는 각각의 함수에 대해 explicit instantiation을 하기 힘들기 때문에 class자체를 explicit instantiation하는 방법으로 아래 코드와 같이 교수님께서 보여주시는데요. 따라작성하며 복습 중 실수로 'class' 키워드없이 'template MyArray<char>;'로 작성하여도 문제없이 실행이 되었습니다. 관련해서 설명해주시면 감사하겠습니다. 항상 답변해주셔서 감사드립니다. template class MyArray<char>;
- 미해결홍정모의 따라하며 배우는 C++
완전탐색이 어려우면요...
선생님, 아이가 c++을 학원을 통해서 배우고 있는데 문제풀이 위주로 진행되다보니 좀 더 깊고 상세하게 배워보라고 선생님 수업을 시작했어요. 몇일전부터 처음부터 차근차근 듣기 시작했는데, 다만, 학원 진도가 많이 나간 상태여서 지금 헤매고 있는 완전탐색에 도움되는 부분을 추천해 주시면 그 부분을 먼저 들어서 이해를 좀 도울 수 있으면 좋겠다 싶어서 문의드려 봅니다. 좋은 강의...정말 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C++
궁금 합니다
상속을 할수있다면 이전 강의에서 설명해주신 구성 ,집합 관계 처럼 설계를 하지않고 다 상속 해주면 더 좋은것 아닌가요? 상속을 할수있는데 구성,집합 ,의존등 관계를 써서 설계를 하는 이유가 따로 있나요? (그냥 강의 듣다가 문득 생각이 들어서 질문 남깁니다)