월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨C개발자를 위한 최소한의 C++
단순대입 오류 발생 이유
기본클래스의 =연산자 메서드를 파생클래스형식 인스턴스에서 호출할 수 있을텐데 data="Hello" 오류 발생하는 이유가 궁금합니다. 아래 메서드에서 반환하는 인스턴스의 데이터형은 CMystringEx인데 메서드에서 지정한 반환 형식은 CMystring이라서 그런 것인가요? CMystring& CMystring::operator= (const char * pParam){this -> setdata(pParam);return *this;}
- 해결됨C개발자를 위한 최소한의 C++
네가지 형변환 강의 질문
제가 c++ 강의를 보면서 무언가 빼먹은거 같아서 질문을 드려봅니다...강의 설명 중 3분즈음에 등장하는 const_cast를 설명하실 때 궁금한 내용입니다.const MyData& rdata = a; 일때rdata의 멤버접근을 할 수 있는거는 const 키워드가 붙은것만 가능하다고 하셨는데그 자세한 이유가 궁금합니다 <상수형 참조가 상수형 메서드만 호출>
- 해결됨C개발자를 위한 최소한의 C++
CMyString Step10 강의 질문
강의 2분 50초 쯤에 등장하는virtual void onSetData(const char*& pParam)에서 포인터 변수의 값을 바꾸기 위해 &참조자를 추가하셨습니다.const가 붙은 시점에서 연산자 우선순위가 어떻길래 값이 변경가능해진 것인지 궁금합니다!
- 해결됨C개발자를 위한 최소한의 C++
임시 객체와 보이지 않는 복사 생성 강의 질문
임시 객체 개념 자체가 많이 낯설어서 2가지 질문을 해보려고 합니다 ㅠㅠ클래스가 함수의 매개변수나 반환자료형일 경우, 상수형 참조를 하라고 하셨는데특별히 이렇게 해야하는 이유가 있는걸까요??19분쯤에 등장하는 예제에서 함수의 매개변수를 상수형 참조로 바꿔도 여전히 변환생성자가 불러와지는 걸 봤을 때는 특별히 차이점이 있어보이지 않습니다... 17분 50초 쯤에 등장하는 '비const 참조는 lvalue에만 바인딩할 수 있습니다" 라는 오류가 등장하는데 이 오류가 이해가 되질 않습니다..
- 해결됨C개발자를 위한 최소한의 C++
섹션8 3번째 강의 (실습 프로젝트 - 문자열 필터개선) 질문
void CMyStringEx::onSetData(const char*& param) { cout << "CMyStringEx::onSetData" << endl; if (param != nullptr) { if (strcmp(param, "FORBID") == 0) { param = "****"; } } CMyString::onSetData(param); return; }실습 코드 관련 질문입니다파라미터가 const char*& 로 되어있는데 아래 param = "****" (강의 코드기준 param="우리귀요미")처럼 매개변수에 대입을 하는 부분이 있는데 const가 붙어있어도 매개변수 값 수정이 가능한가요?
- 해결됨C개발자를 위한 최소한의 C++
차이점을 잘 모르겠습니다.
주신 프로그램 중 constructSelect.cpp 에서 디폴트 생성자를 지우면 에러가 발생하는데 virtualFunction 에서는 디폴트 생성자가 없어도 동작합니다. constructSelect.cpp 에서 선언 방식이 아닌 new 연산자를 사용해서 해봐도 에러가 발생하고객체 내에 멤버메서드가 없어서 그런가 해서 멤버를 만들어도 에러가 발생합니다VirtualFunction 내의 소멸자의 virtual 을 제거해도 이건 잘 작동합니다.눈으로 봐서는 도저히 차이점을 모르겠습니다.
- 해결됨C개발자를 위한 최소한의 C++
이동생성자 관련
안녕하세요. 선생님 이동 생성자 강의 내용 중 질문이 있습니다. (아래 코드 참고) delete pnData를 하면, 포인터 변수가 해제되어pnData = rhs.pnData;를 실행할 수 없는 것이 아닌지 궁금합니다. 실재로는 포인터 값은 그대로고, 가리키는 값(int 0)만 삭제되는 것인가요? 포인터 값은 놔두고 가리키는 값만 없애는 문법은 어떻게 되나요? delete를 안하고, pnData = nullptr; 로만 수정해도 됬을 것 같습니다. class TestData { public: TestData(){ pnData = new int(0); } ... TestData(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } ... TestData& operator=(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } }
- 해결됨C개발자를 위한 최소한의 C++
new/ delete 질문
포인터 new 시, 주소값과 가리키는 Data 메모리도 동시 할당되나요?포인터 delete 시, 주소값과 가리키는 Data 도 메모리도 해제? 혹은 주소값만 해제되나요?
- 해결됨C개발자를 위한 최소한의 C++
반환유형이 클래스형 참조
안녕하세요 강사님, 반환 유형이 클래스 참조일 때 질문이 있습니다.반환유형이 클래스형인 것보다는 메모리 효율을 위해서 클래스형 참조로 선언을 하는데, 반환하는 참조가 함수 내부에서 생성된 지역 인스턴스의 참조라면 함수 스코프를 벗어나면 해당 인스턴스는 소멸되므로 main함수에서는 참조를 못하게 되는 것 아닌가요?이런 경우에는 반환 유형을 클래스형 참조가 아닌 클래스형으로 선언하는게 적절할까요? 감사합니다!
- 해결됨C개발자를 위한 최소한의 C++
임시객체와 관련하여 질문드립니다
강사님 복사 생성자에서 만들어지는 임시객체와 이동생성자에서 만들어지는 임시 객체의 차이를 아무리 테스트해도 모르겠읍니다. 두 생성간에 사용자가 처리하는 로직만 틀릴 뿐인지요? 아울러 선언으로 생성되는 클래스 인스턴스는 스택에 생성되고 new로 생성되는 인스턴스는 heap에 생성되는건지요?
- 해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
만약 함수내에서 func(ClassA a) { // 여기서 a 는 클래스임 } 과 같이 작성하면 ClassA 의 생성자는 호출되지 않지만 소멸자는 호출됩니다.그 이유를 알고 싶습니다.
- 해결됨C개발자를 위한 최소한의 C++
virtual 함수와 관련하여 질문 있습니다.
만약 기본 메서드로 virtual a() 를 정의한 후 첫번째 파생 클래스에서는 a() 로 정의를 하였습니다.마지막 파생 클래스에서도 a() 로 정의했다면 어떻게 동작하는지 궁금해서 여쭤 봅니다. 제 생각에는 기본하고 첫번째 파생 사이에는 virtual 처럼 즉 기본을 호출해도 파생이 호출될 거 같은데두번째 파생시에는 virtual 의 성격이 사라질 거 같습니다. 확인 부탁드립니다. 강사님
- 해결됨C개발자를 위한 최소한의 C++
생성자와 소멸자의 호출
04_Constructor 테스트 중에 질문 드립니다.Test test01; 과 같이 선언하면 생성자와 소멸자가 모두 호출되는데Test test02 = new Test(); 와 같이 호출하게 되면 소멸자는 호출되지 않습니다. 그 이유가 뭔지 궁금합니다.친절한 강의 감사드립니다.
- 해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
opArithmetic 교육시에 "=" 오퍼레이터의 반환자를 *this 로 하지 않으면 문제가 생길거라 하셨는데 구체적인 문제 설명이 없으셔서 궁금합니다.
- 해결됨C개발자를 위한 최소한의 C++
강사님 질문 드립니다.
임시객체와 보이지않는 복사생성 과정 프로그램에서- 제가 임의로 복사생성자 부분의 프로그램을TestData(const TestData& rhs){ cout << "TestData(const TestData&)" << endl;}- 위와 같이 수정하고- F11키로 디버깅 추적을 해보면 복사생성자가분명 위의 생성자에서는 nData 를 접근하는 명령이 없는데도 아래 부분에 있는private 😀int nData = 0;부분을 수행합니다.왜 그런지 질문 드립니다. 아울러 제가 초기화 부분 "= 0" 를 없애 버리면 수행되지 않습니다.
- 해결됨C개발자를 위한 최소한의 C++
R-value 참조에 대해서 질문이 있습니다.
r-value 참조에 대해서 질문이 있습니다. (02-rvalueRef 예제 강의 기준 r-value 참조 (임시 객체와 유효범위) 8분)코드를 포인터를 볼 수 있게 조금 수정했습니다.int testFunc(int param){ int result = param * 2; std::cout << &result << std::endl; return result;}int&& result = testFunc(10); std::cout << result << "pointer: " << &result << std::endl;임시 객체의 주소를 지우지 않고 가져다 쓰는것이라 하셔서 testFunc 함수의 return 하는 result 의 포인터를 확인 후 받는 result의 포인터가 같은지를 확인해 보았습니다. print된 2개의 result의 포인터 값이 다른 것을 확인했습니다. 혹시 임시 객체라는 것이 함수의 return result 값을 또 다른 포인터로 옮긴 뒤 받기 때문에 return result와 다르게 되는건가요?
- 해결됨C개발자를 위한 최소한의 C++
예외 클래스에서 catch 안의 데이터형이 참조자인 이유
안녕하세요. 강의 잘 보고 있습니다.강의를 듣다가 궁금한 것이 생겨서 질문 드립니다. catch(MyException &exp) { // 생략 }이 강의 예제에서 catch의 예외 데이터형에 클래스 참조자를 받도록 하였는데 만약 아래처럼 참조자를 사용하지 않으면 복사생성이 되나요?catch(MyException exp) { // 생략 }
- 해결됨C개발자를 위한 최소한의 C++
문자열 필터 실습 코드 중 질문 드립니다.
안녕하세요. 강의 잘 보고 있습니다.실습 중 궁금한 것이 있어서 질문 남깁니다.CMyStringEx::onSetData 함수 내용입니다.void CMyStringEx::onSetData(const char*& param) { CMyString::onSetData(param); // 생략 if (param != nullptr) { if (strcmp(param, "멍멍이아들") == 0) { // delete [] param; param = "우리귀요미"; } } }param이 가리키고 있는 곳의 데이터가 "멍멍이아들" 문자열이면 "우리귀요미"라는 새 문자열이 담긴 주소로 바꿔주기 전에 기존 param이 가리키고 있는 곳을 delete 해줘야 메모리 누수가 발생하지 않을 것 같은데 맞나요? 만약 1번이 맞아서 delete를 한다면 CMyString::~CMyString() 소멸자가 호출될 때 문제가 발생할 것 같은데 이를 어떻게 해결하면 될까요?
- 해결됨C개발자를 위한 최소한의 C++
접근제어와 관련한 질문입니다.
안녕하세요! 새해 복많이 받으십시오. 접근제어와 관련하여 강의내용 복습하며 생각해보다가 궁금한 점이 있어서 질문 남깁니다. C언어 클래스에서 private영역에 대해 접근제어에 대해직접 부르는 것만 막는 것인지클래스에 대한 포인터를 통해 접근제어까지 막는 것인지또는 메모리상의 주소를 알아내서 포인터로 변수로 직접 접근하는 경우(...)이 다음 디스포인터영상에서 였나 2번까지는 막고 있는 것을 보여주셨던 것이 기억나는데,3번은 과연 뚫리지 않을까... 생각이 들어서 그렇습니다. 진짜로 묻고 싶은 이유는,사실은 접근제어 라는 게 C++ 프로그래밍 문법상의 규칙으로 컴파일 타임에서 관리할 뿐, '런타임에서는 (C++에서 정해졌었던 문법이고 뭐고;)이걸 죄다 걸러내고 남은 기계어로만 돌아간다' 라고 이해해도 되는가 입니다.(CS지식이 일천한 상태에서 드리는 뇌피셜이라...^^;) 감사합니다.
- 해결됨C개발자를 위한 최소한의 C++
안녕하세요. Deep Copy 부분관련해서 질문 사항이 있습니다.
안녕하세요. 해당 두코드의 차이에 대해서 여쭙고 싶어 CMystring 클래스에는 operator 함수를 구현하지 않은 상황에서 아래 두 코드의 실행 결과가 달라 질문드립니다. 1번 코드CMystring String3 = String2;2번 코드CMystring String3; String3 = String2; 1번 코드에서는 복사가 호출되어 String3에 새로운 메모리가 할당이되고.2번 코드에서는 단순 대입, 즉 shallow copy 가 일어나는 것을 확인하여 String2와 같은 메모리를 참조하는 것을 확인했습니다. 두코드의 동작 방식을 확인하여 둘의 차이를 간접적으로 확인했으나 정확한 이유를 알고싶어 이렇게 질문게시판에 글을 남깁니다.