월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
class에서 배열 생성할 때 질문입니다!
class test{private: int num; int arr[5];public: test() :num(5), arr{ 1,2,3,4,5 } {}test 클래스 에서 arr 배열을 생성할 때 constructor에서 선언하지 않고void init(const int& n) { num = n; arr = { 1,2,3,4,5 }; }init 함수를 써서 test(){ init(5);}이렇게 생성하고 싶은데 위와 같이 생성하려고 하면 init에서 arr = { 1,2,3,4,5 }; 가 expression must be a modifiable lvalue 뜨면서 생성이 안됩니다!이럴 때는 해결 방법이 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
int mian( int argc , char *argv [ ] ) 에서 char * argv[ ] 가 궁금합니다!
char * argv = " abcd " ; 는 문자열의 주소를 받아준다 라고 배웠고char argv[] = "abcd" ; 는 문자열을 받는다 라고 배웠습니다.for (int i = 0 ; i < 4 ; ++i ) cout << argv[i] << endl;해줄경우abcd로 출력하는데7.15 에서는 char *argv[]일 때for ( int count = 0 ; count << argc ; ++count ) count << argv[count] << endl; 출력 값으로10010243.14로 나오는 이유가 뭔가요?char *argv[] 가 어떤 기능을 하는지 잘 모르겠습니다..
- 미해결홍정모의 따라하며 배우는 C++
포인터 공부중 *와 &의 차이가 궁금해졌습니다!
강의 중char name[] = "jack jack;for (int i = 0 ; i < n_name ; ++i){ cout << *(name + i) }라는 코드가 있었는데*(name + i)를 &(name + i) 로 고치면 왜 안 될까요?*랑 & 둘다 같은 말이라고 생각했는데 혼란이 옵니다..ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
template으로 배열을 만들때 다차원 배열 만드는 법 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.Array<Array<int> > test;란 배열을 만들었다면, 이 어레이 클래스 템플릿을 통해 어떻게 2차원 배열의 값을 할당하는 코드를 작성해야하나요?? ㅠㅠ..int array[10][10] 이런 일반 배열의 원소를 할당하는 방법은 알겠는데, 템플렛으로 만든 2차원배열의 원소를 할당하는 법을 모르겠네요..ㅠ Array(); ~Array(); void setSize(size_t value); size_t getSize(); void setElem(size_t index, Type value); void sanitize(Type *elements,Type value); Type getElem(size_t index); Type* getElemPtr(size_t index);
- 미해결홍정모의 따라하며 배우는 C++
강의 43분 다른 메모리 주소가 나오는 이유 질문
43:00에서 같은 헤더 파일 include했지만 다른 주소가나오는데 헤더의 역할을 그냥 코드를 복사 붙여넣기 하는 것인가요? 그래서 43분에 나온 현상은 각각 불러온 include한 파일에서 지역변수로 셋팅이 된거고 그래서 다른 주소값이 나오는 것인가요?사실 제 생각이 맞냐 안맞냐보다는 43분에서 왜 다른 메모리 주소가 나오는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
3.6 논리연산자 따라해보기
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 따배씨 강의중에 따라해보기 하는 중인데 예상과 다르게 나와서 질문드려요3.6강의 logical operator (논리 연산자 강의) 28:13 부분인데요std::cout << std::boolalpha;1.std::cout << false || true;2.std::cout << false && true;3.std::cout << (true && true) || true;4.std::cout << (false && true) || true;5.std::cout << (false && true) || false || true;이렇게 치면 1번이나 3번 4번에서는 true가 나올 것 같은데 false로 나오더라고요 반대로 true || false로 두면 true로 나옵니다bool b1 = false || true;bool b2 = (false && true) or true;std::cout << b1 << std::endl;std::cout << b2 << std::endl;근데 이렇게 변수로 출력하면 예상했던 것처럼 true로 나오고요왜 이런 차이가 생기는 건가요?? 연산자 우선순위?? 아니면 cout에서는 or뒤는 안보는 건가요???디버그 모드로 돌려도 잘 모르겠어서 질문드려요cout << ((false && true) or true); 이렇게 괄호를 치면 true 나오네요 우선순위 문제인가 보군요..cout<<false || 까지만 되고 뒤에 true부분은 그냥 없는걸로 처리되는건가요??
- 해결됨홍정모의 따라하며 배우는 C++
11:05부근 explicit instantiation이 이해가 잘 가지 않습니다.
char 타입으로 instantiation해야된다는 내용은 main.cpp에 있고 main.cpp는 MyArray. h만 include하고 있으므로 MyArray.cpp파일에 있는 print()의 바디부분을 실행할 때는 templatized된 클래스를 어떤 자료형으로 instantiation해야할 지 모른다는 것까지는 이해했습니다.그리고 이를 해결하기 위해서 MyArray.cpp에 가서 char 타입으로 컴파일을 해야된다라고 알려주는게 explicit instantiation이다라고 말씀하셨는데 예제를 보면 template class MyArray<char>; template class MyArray<double>;이렇게 char 타입도 있고 double 타입도 있으니깐 이건 char 타입으로 컴파일을 해야된다, double 타입으로 컴파일을 해야된다가 될텐데 여기서 다시 char 타입으로 해야하는지 double 타입으로 해야하는지는 결국 main.cpp를 거쳐야 알 수 있는 내용이 아닌가요? 어떤 원리로 char이랑 double의 이지선다가 된 상황에서 char 타입을 선택하게 되는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
1.11 강의에서 add.h 와 add.cpp로 분리하였습니다.
파일이 서로 다른데 어떻게 definition이랑 declaration을 서로 찾을 수 있는 건가요??(만약 서로 찾을 수 있다는 것이 맞다면 한 프로젝트 안에서 파일들이 서로 달라도 함수 선언을 할 때 항상 이름이 겹치지 않게 해줘야 하는 것이 맞나요?)
- 미해결홍정모의 따라하며 배우는 C++
생성자 매개변수에 & 붙히는것
강의를 계속 보다 보면 일반적으로 함수 파라미터에 &를 자주 붙히시는거 같습니다. 11.2 2분쯤에도 그냥 string name_in으로 받아도 될 거 같은데 string &name_in으로 받는 이유가 따로 있을까요?
- 미해결홍정모의 따라하며 배우는 C++
1.7 지역 범위 강의 연습문제 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 9:47 연습 문제 질문인데요dosomething함수를 부르고 123을 출력한 다음에 다시 다음 줄 읽을 때는 dosomething함수에서 썼던 x=123;은 중괄호를 벗어나면서 사라져서 그런 것이라고 이해 해도될까요?? 그리고만약에 함수를 void형이 아니라 int 형으로 바꿔서 return x;으로 바꿔도 똑같이 0으로 출력 되던데 함수의 리턴 값도 저 dosomething(x);줄을 벗어나면intx(0)으로 초기화 되는 건가요????만약에 123을 출력하려고 하면 어떻게 해야할가요??
- 미해결홍정모의 따라하며 배우는 C++
하드코딩과 초기화
하드코딩은 변숫값을 고정시키는 것이라고 알고 있습니다. 그렇다면 변수를 선언하고 초기화 하는 과정에서 literal 을 변수에 넣는다면 그것은 하드코딩을 한 것인가요?초기화를 하면 하드코딩을 할 수 밖에 없다고 생각하는데 설명 부탁드립니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
static int a;
void doSomething(){ static int a ; ++a; cout << a << endl; }int main(){ doSomething(); doSomething(); } 연습 차 일부러 static에 초기화 값을 안넣어줬는데요. error 가 안나고 0으로 자동 초기화해서 1, 2 ,가 출력되더라고요. 원래 static은 초기화를 안해주면 0으로 알아서 넣어주나요?
- 해결됨홍정모의 따라하며 배우는 C++
3분 30초 부근 질문 있습니다.
그림을 보면 Der class의 가상표에 func1(), func2()가 있는데 저는 my_derived에 func2()가 없어도 상속 구조이므로 호출이 되어서 func2()이 실행이 되는데 virtual 키워드를 만나게 되므로 Base class의 가상표를 호출해서 fun2()가 실행되는 구조로 생각이 드는데 틀린 걸까요? 아니면 파생 클래스는 그보다 상위 클래스의 virtual function에 대한 포인터를 가상표에 다 지니고 있는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
9:28 개념
9:28에서 설명하신 주소는 같지만 값은 지워져서 쓰레기 값이 나오는 개념이 혹시 Dangling Pointer인가요?learncpp.com 으로 공부하다가 강의가 있었으면 해서 찾아왔는데 도움이 많이 되고 있습니다.
- 해결됨홍정모의 따라하며 배우는 C++
3분 10초 부근 질문 있습니다.
~Base()가 virtual 이라면은 ~Base() 대신에 오버라이드된 ~Derived()가 실행이 되고 끝이 아니라 왜 ~Base()도 실행이 되나요?~Derived() override { cout << "~Derived()" << endl; delete[] m_array; Base::~Base(); }저는 이렇게 해야될 걸로 예상했는데 소멸자는 예외인가요?
- 미해결홍정모의 따라하며 배우는 C++
혹시 자막설정 가능한가요?
자막설정이 없는건가요? 궁금해서 여쭤봅니다
- 해결됨홍정모의 따라하며 배우는 C++
공변 반환형에 대해서 질문이 하나 더 있습니다.
#include <iostream> #include <string_view> class Base { public: // This version of getThis() returns a pointer to a Base class virtual Base* getThis() { std::cout << "called Base::getThis()\n"; return this; } void printType() { std::cout << "returned a Base\n"; } }; class Derived : public Base { public: // Normally override functions have to return objects of the same type as the base function // However, because Derived is derived from Base, it's okay to return Derived* instead of Base* Derived* getThis() override { std::cout << "called Derived::getThis()\n"; return this; } void printType() { std::cout << "returned a Derived\n"; } }; int main() { Derived d{}; Base* b{ &d }; d.getThis()->printType(); // calls Derived::getThis(), returns a Derived*, calls Derived::printType b->getThis()->printType(); // calls Derived::getThis(), returns a Base*, calls Base::printType return 0; }공변반환형이 잘 이해되지 않아서 https://www.learncpp.com/cpp-tutorial/the-override-and-final-specifiers-and-covariant-return-types/ 에서 한 번 더 공부를 해봤는데요There is one special case in which a derived class virtual function override can have a different return type than the base class and still be considered a matching override.If the return type of a virtual function is a pointer or a reference to some class, override functions can return a pointer or a reference to a derived class. These are called covariant return types.One interesting note about covariant return types: C++ can’t dynamically select types, so you’ll always get the type that matches the actual version of the function being called.Now the interesting case. We then call b->getThis(). Variable b is a Base pointer to a Derived object. Base::getThis() is a virtual function, so this calls Derived::getThis().Although Derived::getThis() returns a Derived*, because Base version of the function returns a Base*, the returned Derived* is upcast to a Base*.Because Base::printType() is non-virtual, Base::printType() is called.파생 클래스의 virtual function 오버라이드가 기본 클래스의 return 타입과 다른 return 타입을 가지면서 여전히 매치되는 오버라이드라고 생각되는 특별한 경우가 하나 있다.만약 virtual function의 return 타입이 어떤 클래스의 포인터나 레퍼런스라면 오버라이드 함수들은 그 클래스의 파생 클래스의 포인터나 레퍼런스를 return할 수 있다. 이러한 것들을 공변 반환형이라고 부른다.공변 반환형에 대해서 한 가지 흥미로운 사실이 있다. C++가 동적으로 타입을 선택할 수가 없어서 호출되는 함수의 원래 버전의 타입을 항상 갖는다는 것이다.이제 흥미로운 경우이다. 우리는 b->getThis()를 호출한다. b는 Derived 객체의 Base 포인터이다. Base::getThis()는 virtual function이라서 Dervied::getThis()를 호출한다.비록 Dervied::getThis()가 Dervied*를 반환할 지라도 Base 버전의 함수는 Base*를 return하기 때문에 Dervied*는 Base*로 upcast된다.그리고 Base::printType()은 non-virtual function이기 때문에 그냥 Base::printType()이 호출된다.이렇게 해석을 해보았는데 One interesting note about covariant return types: C++ can’t dynamically select types, so you’ll always get the type that matches the actual version of the function being called. 이 부분에서 type이 의미하는게 return type을 의미하는 건지 아니면 자기 자신의 class type을 의미하는 건지 알고 싶습니다. 그리고 동적으로 타입을 선택할 수 없다는 게 무슨 의미인지도 알고 싶습니다.
- 해결됨홍정모의 따라하며 배우는 C++
공변 반환형에 대해서 질문 있습니다.
왜 공변 반환형은 포인터나 레퍼런스는 가능한데 왜 클래스가 직접적으로 return 되는 경우는 없나요? 무언가 이유가 있을 거 같은데 모르겠습니다...
- 미해결홍정모의 따라하며 배우는 C++
strcat질문 드립니다.
교수님의 강의대로 strcat를 똑같이 진행하였는데 c4996이라는 에러가 발생하였습니다. 그런데 교수님 강의에선 바로 출력이 되었는데 제 컴퓨터는 에러로 나오네요... 코드를 변경 하라고 하는데 맞는건가요?
- 미해결홍정모의 따라하며 배우는 C++
영상에서 나온 문제를 진행하고 있는데 예외 발생이 왜 뜨는지 이해가 돼질 않습니다.
제가 코드를 작성하면서 임시로 수를 저장하고 보내는 방식으로 적용을 했는데 예외처리가 나와서 찾아보니 지정된 범위보다 큰 숫자를 넣었다는게 문제가 돼서 다시 해봐도 계속 예외 발생이 나오네요 또한, 제 코드에 문제가 있다면 알려주시길 바랍니다. const int length = 5; int array[length] = { 3, 5, 2, 1, 4 }; for (int start = 0; start < length - 1; start++) //0~3 3<4 { for (int current = start + 1; current < length; start++)//1~4 4<5 { if (array[start] < array[current]) { array[current] = array[current]; } else if (array[start] > array[current]) { int temp = array[start]; array[start] = array[current]; array[current] = temp; } } printArray(array, length); }return 0;