월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
Win 32라는 뜻은
win32라고 나온다는 것은 linux에서 visual studio를 진행하면 실행파일이 다른 형식으로 제공된다는 걸까요? + win에서 사용했던 파일을 linux 환경에서 옮겨서 실행하려고 하면 실행이 안 되나요? 저 부분에 (x86) -> configure manage 부분을 들어가보니 Arm 으로 디버깅하면 리눅스에서 실행할 수 있는 파일로 디버그 되는 걸까요? 좋은강의 감사드립니다
- 미해결홍정모의 따라하며 배우는 C++
배열과 포인터, 문자열 심볼릭 상수와 관계
int main() { char name[] = "ABC"; char *name2 = "DEF"; int arr[] = {10, 20, 30}; cout << name << endl; //ABC cout << &name << endl; //0x16..94 cout << *name << endl; //A = name[0] cout << *(name+1) << endl; //B = name[1] cout << &(*(name+1)) << endl; //BC ? --------질문(1) //cout << &(name+1) << endl; // --------------질문(1) cout << name2 << endl; //DEF cout << &name2 << endl; //0x16..88 cout << *name2 << endl; //D = ? -------------질문(2) cout << *(name2+1) << endl; //E = ? ----------질문(2) cout << arr << endl; //0x16..98 ? ------------- 질문(3) cout << &arr << endl; //0x16..98 ? ------------질문(3) cout << *arr << endl; //10 = arr[0] } 질문 1 주소값이 나오지 않고 BC가 나오는 이유는 무엇인가요 cout때문인가요 ? 또 &(name+1)은 왜 안되는 것인가요 질문 2 char *name 이 배열과 비슷하게 작동이 되는 것 같은데 배열로 봐야 하는 것인가요? 그럼 name2[0]으로 봐도 무방한것인가요 질문 3 arr와 &arr출력값이 같은데 arr는 주소값이라서 앞에 & 가 생략이 된 것인가요? 제가 봐도 너무 질문이 많고 두서가 없는데 너무 헷갈려서 정리가 잘 안되네요 죄송해요 해결부탁드립니다 ㅜ
- 미해결홍정모의 따라하며 배우는 C++
for문에 증감연산자 질문입니다.
for문 예제를 보면 for (int count = 0; count < 10; ++count) 에서 증감연산자 ++가 count앞에 오는걸 알 수 있는데요, 이 for문은 for (int count = 0; count < 10; count++) 로 바꾸어도 같은 결과가 출력이 되는것 같은데 ++count를 할때와 count++를 할때의 차이점이 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
printInt 함수에서
밑줄 친 부분에서 "const" 가 없으면 오류 창에 " int& 형식(const 한정 형식아님)의 참조를 "Cents"형식의 값으로 초기화할 수 없습니다." 라고 뜨는데, 왜 그런걸까요?? 강의에서 다룬 적이 있는 것 같아서 처음부터 다시 찾아봤는데, 발견을 하지 못하여 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C++
17.1 string
안녕하세요 strlen,strcpy같은 함수와 string을 같이 사용하고 싶을 때 헤더파일 cstring과 string을 둘다 include해도 되나요?
- 미해결홍정모의 따라하며 배우는 C++
5:10 부분 결과값이 강의와 약간 다르게 나오는데 원인이 뭔지 모르겠습니다
main.cpp #include "AutoPtr.h" #include "Resource.h" using namespace std; AutoPtr<Resource> generateResource() { AutoPtr<Resource> res(new Resource(3)); return res; } int main() { { AutoPtr<Resource> main_res; main_res = generateResource(); } return 0; } //////////////////////////// AutoPtr.h #pragma once #include <iostream> template<class T> class AutoPtr { public: T* m_ptr = nullptr; public: AutoPtr(T* ptr = nullptr) :m_ptr(ptr) { std::cout << "AutoPtr default constructor" << std::endl; } ~AutoPtr() { std::cout << "AutoPtr destructor" << std::endl; if (m_ptr != nullptr) delete m_ptr; } T& operator*() const { return *m_ptr; } T* operator->()const { return m_ptr; } bool isNull()const { return m_ptr == nullptr; } AutoPtr(const AutoPtr& a) { std::cout << "AutoPtr copy constructor" << std::endl; //deep copy m_ptr = new T; *m_ptr = *a.m_ptr; } AutoPtr& operator=(const AutoPtr& a) { std::cout << "AutoPtr copy assignement" << std::endl; if (&a == this) return *this; //deep copy m_ptr = new T; *m_ptr = *a.m_ptr; return *this; } ///////////////////////////////////// Resource.h #pragma once #include <iostream> class Resource { //private: public: int* m_data=nullptr; unsigned m_length = 0; public: Resource() { std::cout << "Resource default constructed" << std::endl; } Resource(unsigned length) { std::cout << "Resource length constructed" << std::endl; this->m_data = new int[length]; this->m_length = length; } ~Resource() { std::cout << "Resource destroyed" << std::endl; if (m_data != nullptr) delete[]m_data; } Resource(const Resource& res) { std::cout << "Resource copy constructed" << std::endl; Resource(res.m_length); for (unsigned i = 0; i < m_length; ++i) m_data[i] = res.m_data[i]; } Resource& operator =(Resource& res) { std::cout << "Resource copy assignment" << std::endl; if (&res == this)return *this; if (this->m_data != nullptr)delete[]m_data; m_length = res.m_length; m_data = new int[m_length]; for (unsigned i = 0; i < m_length; ++i) m_data[i] = res.m_data[i]; return *this; } void print() { for (unsigned i = 0; i < m_length; ++i) std::cout << m_data[i] << " "; std::cout << std::endl; } }; 웬만하면 코드 질문은 스스로 해결하려고 했는데 며칠 고민하면서 디버거로 찍어봐도 중간중간에 뜬금없이 생성자가 호출되거나 다시 복사가 되는 원인을 못찾겠습니다
- 미해결홍정모의 따라하며 배우는 C++
[3:30] 함수의 매개변수 주소
안녕하세요! 항상 좋은 답변 감사드립니다. doSomething 함수에서 선언된 매개변수 int y의 주소가, doSomething(5) doSomething(x) doSomething(x+1) 실행될 때마다 똑같은데, 함수가 한번 실행 되면 할당받은 주소가 없어지고, 두번째 실행부터는 다른 주소가 뜰것 같은데 셋 다 똑같네요.. 왜 그런 것인가요?
- 미해결홍정모의 따라하며 배우는 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에는 초기화 된 상태에서 값을 입력할 수 있게된다. 제가 제대로 이해하고 있는것이 맞나요?