📱인프런 모바일 App 😆
홍정모의 따라하며 배우는 C++

홍정모의 따라하며 배우는 C++

(71개의 수강평)

1599명의 수강생

77,000원

평생
입문, 초급
수료증
201개 수업, 총 47시간 17분
위시리스트 추가
주형찬 프로필

char와 unsigned char의 차이점은 무엇인가요? 주형찬 21시간 전

교수님께서 item에 대하여 선언하실때 unsigned char를 사용하셨는데, 이게 그냥 char형을 사용한 것과 어떤 차이점이 있는지 궁금합니다. 음수, 양수를 구분하는 것이 문자형에서도 의미가 있는건가요?

1
유동호 유 프로필

selection 에 문자나 범위를 초과하는 수를 넣으면 유동호 유 6일 전

안녕하세요, 교수님. 좋은 강의 감사합니다.

 

selection에 문자와 범위를 초과하는 수를 넣었는데 그림과 같이 무한으로 도는걸 발견했습니다.

디버깅으로 selection을 보면 문자일 때는 0으로 나왔습니다.

selection에 문자나 엄청나게 큰 수를 넣으면 do-while 안에 내용이 왜 무한으로 도는 건가요??

1
aeriepeak 프로필

struct, tuple 의 return 형태 관련 aeriepeak 6일 전

안녕하세요 교수님,

struct 와 tuple 의 경우 아래처럼 프린트를 해보니까 return by reference 로 반환하는것 같습니다. (주소가 같네요). 이 경우에는 영상 초반의 return by reference 와 달리 에러 메시지도 안나오고 문제가 없는지요?

 

using namespace std;

struct Something {
int a;
int d;
};

Something getSomething() {
Something s {4, 7};
cout << &s << " " << sizeof(s) << endl;
return s;
}

tuple<int, double, double> getTuple() {
int a = 10;
double d = 3.14;
tuple<int, double, double> tup = make_tuple(a, d, 0.0);
cout << &tup << " " << sizeof(tup) << endl;
return tup;
}

int main() {
// tuple<int, double, double> tup = getTuple();
// cout << &tup << " " << sizeof(tup) << endl;

Something s = getSomething();
cout << &s << " " << sizeof(s) << endl;
}

1
정민기 프로필

9.11강 대입연산자 오버로딩에서 return되는 값에 대한 질문 정민기 11일 전

선생님 안녕하세요? 

언제나 좋은 설명의 질좋은 강의 감사드립니다.

대입연산자 오버로딩 강의라서 해당 것에 대한 설명은 크게 없지만

8:26초에서 컴파일시키고 실행하였을때, 

 

cout << (int&)hello.m_data << endl;   //출력: 메모리주소

cout << hello.getString() << endl;  // 출력: 텍스트 자체

과 같이 위에 라인은 주소, 아래라인은 char가 나옵니다.

궁금한 것은 아래 클래스 정의에서 

m_data는 char type을 가리키는 포인터인데, 동적할당되면서 해당 메모리 주소에 source로 부터 복사하였습니다.

그리고 그 멤버 펑션 중에서 getString()함수도 return 하는 것이 m_data이고 함수 선언부에서도 return type이 char*와 같이 포인터(주소) 입니다. 

 

질문

즉, cout << hello.m_data << endl; 하면 주소가 나와야 할 것 같고,

cout << hello.getString() << endl; 하면 마찬가지 주소가 나와야하는데(return이 m_data에다가 리턴 타입 char*이므로) 전자의 경우 왜 다시 (int*)을 써서 주소화 시켜 출력하고, 후자의 경우 그냥 텍스트만 나오는 것인가요??

 

class MyString 정의부분

{

public:

char *m_data = nullptr;

 

...생략

 

char* getString() { return m_data; }

};

 

 

*** 제가 공부한 바로 array를 가르킬 때 어레이 전체를 나타내는 방법이 첫번째 index 주소로 하고,

그걸로 결국 함수나 다른 파라미터로 사용할 때 넣으면, 그 전체 어레이 받아들이는 것처럼

char*해서 그 주소가 들어가면 그냥 char 입력된 모든 "Hello"가 array처럼 불러와지는 건가요?

 

좋은 답변 미리 감사드립니다. 

 

 

1
chowooseoung@gmail.com 프로필

전처리기 매크로 부분 질문입니다. chowooseoung@gmail.com 15일 전

헤더가드랑 전처리기 강의를 보다가 매크로에 대해서 궁금한게 생겼습니다.

 

제가 알기론 이미 빌드된 파일을 수정후 다시 빌드했을때 수정된 부분만 빌드가 되어서 처음보다는 짧게 걸리는걸로 알고있습니다.

그런데 매크로같은 경우에는 하나만 수정을해도 코드전체에서 교체될부분을 찾아야하기때문에 결국 전부다 새로 빌드하는 것과 같은 시간이 걸리게될거같은데 맞나요 ? 

최근에 언리얼 엔진 코드에서 매크로로 정의된 부분을 고치고 새로빌드했을때 한줄만 고쳤는데 처음과 비슷한 시간이 걸려서 궁금해서 질문합니다.

아니면 제가 알고있던게 틀렷엇나요 ?

1
세상으로 프로필

operator << 에 대한 error 세상으로 16일 전

operator << 에 대한 error는 다음과 같습니다.

ErrorC2679binary '<<': no operator found which takes a right-hand operand of type 'T' (or there is no acceptable conversion)

 

2
세상으로 프로필

operator << 에 관한 질문입니다 세상으로 16일 전

07:57 위치에 friend std::ostream& operator << (std::ostream& out, Cents& cents)

{

out << cents.m_cents;

return out;

}에서 두번째 입력값인 Cents& cents앞에 const를 빼고 compile하니 에러가 발생합니다.

꼭 const를 입력해야하는 이유가 무었인지 궁금합니다.

1
지민관 프로필

15.3강 교수님의 출력 화면에는 출력되지 않는 copy constructor가 생성됩니다. 지민관 18일 전

안녕하세요 교수님! 따배씨 잘 보고 배우고 있습니다.

 

15.3강의 6분 20초쯤 교수님께서 띄우시는 화면에는 바로 AutoPtr default constructor / Resource length constructed / AutoPtr default constructor / 이후에 바로 AutoPtr copy assignment 가 등장하는데요, 제 코드에서는

AutoPtr copy constructor / Resource default constructor / Resource copy assignment / AutoPtr destructor 의 4가지 과정을 거친 후에야 AutoPtr copy assignmnet가 등장합니다. 뒤에 수정하여 적는 AutoPtr move도 마찬가지입니다.

잘못 입력한것인가 싶어 몇 번씩 다시 따라가봤는데도 결과가 똑같아서, 어떤 부분을 놓치고 있는 것인지 답답하여 질문드립니다. 아래에는 AutoPtr.h와 Resource.h, main.cpp를 첨부합니다. 좋은 강의 감사합니다.

AutoPtr.h

#include <iostream>

template<class T>

class AutoPtr

{

private:

T* m_ptr;

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;

}

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 assignment " << std::endl;

if (&a == this) // prevent self-assignment

return *this;

if (m_ptr != nullptr) delete m_ptr;

//deep copy

m_ptr = new T;

*m_ptr = *a.m_ptr;

 

return *this;

}

};

 

Resource.h

#pragma once

#include <iostream>

class Resource

{

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(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()

{

std::cout << "Resource destroyed" << std::endl;

if (m_data != nullptr) delete[] m_data;

}

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;

}

 

};

 

main.cpp

 

#include "Timer.h"

#include "AutoPtr.h"

#include "Resource.h"

 

AutoPtr<Resource> generateResource()

{

AutoPtr<Resource> res(new Resource(10000000));

return res;

}

 

int main()

{

using namespace std;

streambuf* orig_buf = cout.rdbuf();

Timer timer;

{

AutoPtr<Resource> main_res;

main_res = generateResource();

}

cout.rdbuf(orig_buf);

timer.elapsed();

return 0;

}

2
dhworhkd11 프로필

void와 main의 차이를 알고싶습니다. dhworhkd11 19일 전

언제 void를 쓰고 언제 int를 사용하는지 궁금합니다!

2.4강 void 강의를 들었는데 차이를 찾지 못했습니다. void가 메모리가 없다는 점을 알겠는데 정확히 무슨차이가 발생하는지 모르겠습니다!  올려주신 강의중에 도움이 될만한 강의목록이 있을까요?

1
세상으로 프로필

something.getValue()=10에 관련된 질문 세상으로 22일 전

15:07 지점에서 something.getValue()=10라고 되어 있는데 어떤 의미인지 잘 이해가 안됩니다.

10의 값이 m_value에 저장되는것인지요?

1
세상으로 프로필

vector로 array선언시 주소문제 세상으로 25일 전

vector로 array를 선언하는 경우 &arr과 &arr[0]가 주소가 다릅니다. 만약 static array로 선언한 &arr과 &arr[0]는 주소가 같은데요. 왜 그런것인지 설명 부탁드립니다.

5
distel 프로필

강의 유튜브로 재생할 수 있나요? distel 26일 전

유튜브 앱 활용해서 모바일로 다운받아서 보려고 결제했는데요, 지금 보니까 유튜브가 아닌것 같기도 하고 잘 모르겠네요... 유튜브에 공개 제한 걸어서 강의 재생 가능한지 궁금합니다!

2
dhworhkd11 프로필

.. dhworhkd11 1달 전

int 뒤에 main()이 와야만 함수가 실행되는건가요?

1
dhworhkd11 프로필

소스를 여러개중 하나만 선택해서 실행하는 방법이 뭔가요?! dhworhkd11 1달 전

강의 내용을 따라가면서 프로젝트를 만들고 소스가 여러개로 저장될 때 가 있는데 다시 프로젝트를 실행해볼때 한 소스에 대해서만 실행하고 싶은데 어떻게 해야 할까요 ㅜㅠㅠ

1
SpeedGogo 프로필

Github 사용중 에러 발생 SpeedGogo 1달 전

안녕하세요 교수님~

교수님 명강의 열심히 공부중에 있는 학생입니다. 학습도중 어려움점을 만나 해결이 어려워 이렇게 글을 남기게 되었습니다.

아래 내용과 같이 에러가 발생되었을 경우 안내와같이 솔루션 마우스 우클릭후 솔루션 대상변경하게되면 문제를 제거할수 있을 것 같은데 솔루션 마우스 우클릭후 속성을 찾을 수 가 없습니다.

아래와 같은 에러가 발생될 경우 어떻게 처리하면될까요?

 

 

 

. 발생 경로 :  노트북 비주얼스튜디오2019 에서 작업후 데스크탑 비주얼스튜디오 2017에서 github를 통해 다운로드                    받은 후 빌드 할수 없다는 에러가 발생되었습니다.

에러 로그 :  심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태

                오류 MSB8020 v142에 대한 빌드 도구(플랫폼 도구 집합 = 'v142')를 찾을 수 없습니다. v142 빌드 도

                구를 사용하여 빌드하려면 v142 빌드 도구를 설치하십시오.  [프로젝트] 메뉴를 선택하거나 솔루션을 마

                우스 오른쪽 단추로 클릭한 다음 "솔루션 대상 변경"을 선택하여 현재 Visual Studio 도구로 업그레이드할

                수도 있습니다.                    

               C:\Users\mae\Source\Repos\ich0103TestCode\Cplus_Console\homework\homework.vcxprojC:\Program Files (x86)\Microsoft VisualStudio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Platform.targets67

 

2