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

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

(96개의 수강평)

2074명의 수강생
77,000원
지식공유자 · PP TREE
201회 수업· 총 48시간 27분수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 초급
jyk2367 프로필

버블정렬 짜봤는데 더 좋은방법 있나요? jyk2367 1일 전

#include <iostream>

using namespace std;

void printArray(const int array[],const int length)

{

for (int index = 0; index < length; ++index)

{

cout << array[index] << " ";

}

cout << endl;

}

int main(void)

{

const int lengthe = 5;

int array0[lengthe] = { 3,5,2,1,4 };

int max = 0;

for (int reset = 0; reset < lengthe; reset++) 

{

for (int i = 0, j = 1; (i < lengthe - 1) && (j < lengthe); j++, i++)

{

if (array0[i] <= array0[j])

continue;

else if (array0[i] > array0[j]) 

{

temp = array0[i];

array0[i] = array0[j];

array0[j] = temp;

}

printArray(array0, lengthe);

}

}

return 0;

}

0
훈한 프로필

<34:05 > 10진수 추출시 아무것도 뜨지 않는 오류가 일어나는 이유. 훈한 4일 전

각각의 추출되는 색깔 값을 char 타입으로 지정하고 그냥 10진수로 추출할 때 오류가 나는 이유는 무엇인가요? 왜 int로 캐스팅 할때는 정상적으로 표기가 되나요? 

1
미니미니 프로필

for문 범위잡기 미니미니 5일 전

선택정렬과 버블정렬을 코드로 짜보면서 궁금증이 생겼습니다.

항상 배열( 배열속 숫자들의 순서)를 정해놓고 시작을 해서 코드를 짰는데 , 그래서 인지 for문의 범위가 다 다르게 코드를 짰습니다. 혹시 모든 배열(개수가 5개인)에 적용되는 코드가 있는지 궁금합니다. 계속 고민해봤는데, for문의 범위를 어떻게 해야할지 모르겠습니다.

뭔가 직접 손으로 정렬들을 해본 후 for문의 범위를 적는게, 주먹구구식으로 짜맞추는 느낌이 듭니다.

부족한 글이지만 저의 답답함이 잘 전달되었으면 좋겠습니다:)

감사합니다.

1
훈한 프로필

singned 정수인지 unsigned 정수인지 구별은 어떻게 하나요? 훈한 6일 전

안녕하세요 선생님 :)

예를 들어 어떤 프로그램의 코딩 라인 중에서 2진수를 사용하는 부분이 있을 때, 명시한 2진수 숫자가 10진수로 변환 될 때  signed가 되는지 unsigned가 되는지는 어떻게 구별하나요?

(항상 유튜브에서 좋은 말씀과 여러 훌륭한 강의들을 제공해 주셔서 감사합니다^^ 더 화이팅 할게요!!)

1
dlgydlf12345 프로필

throw; vs throw e;의 차이가 궁금합니다. dlgydlf12345 6일 전

/*

예외 클래스와 상속

*/

#include <iostream>

using namespace std;

class Exception

{

public:

virtual void report() const

{

cerr << "Exception report" << endl;

}

};

class ArrayException : public Exception

{

public:

void report() const override

{

cerr << "Array exception" << endl;

}

};

class MyArray

{

private:

int m_arr[5];

public:

int& operator[] (const int& index)

{

//if (index < 0 || index > 4) throw - 1;

if (index < 0 || index > 4) throw ArrayException();

return m_arr[index];

}

};

void doSomething()

{

MyArray my_arr;

try

{

my_arr[100]; //멤버함수에서 throw를 던져도 받을 수 있음.

}

catch (const int& x)

{

cerr << "Exception" << x << endl;

}

catch (Exception & e)// Exception & e = ArrayException();

{

cout << "doSomething()" << endl;

e.report();

//rethorw

throw e; //하면 다형성이 풀림?

//throw;

}

}

int main()

{

try

{

doSomething();

}

catch (Exception & e)

{

cout << "main()" << endl;

e.report();

}

return 0;

}

throw ArrayException()하고 두번의 catch문을 모두 Exception으로 받게 해놨습니다. 그런데 처음 catch에서는 다형성 성질에 맞게 자식클래스의 report를 실행했는데 throw e로 했을 경우에는 자식클래스의 report가 아닌 부모클래스의 report를 실행합니다. 거기다가 throw;로 했을 경우에는 정상적으로 자식클래스의 report를 실행합니다.

1. throw e;로 했을 경우에는 왜 다형성이 풀리는 건가요?

2. throw;랑 throw e; 랑 차이는 무엇인가요?

1
minho9259 프로필

함수 포인터 크기 minho9259 11일 전

double foo()

{

return 5.0;

}

int goo()

{

return 6;

}

int main()

{

std::function<int()> fcnptr; // int를 반환하고 매개 변수가 없는 함수 포인터 변수 fcnptr 선언

cout << sizeof(fcnptr) << endl; // 40

fcnptr = goo;

cout << fcnptr();

return 0;

}

함수 포인터도 함수의 주소를 기억하는 변수니까 4bytes를 

차지하지 않을까? 싶어서 sizeof를 해봤는데 40이라는 수가 나오네요. 

왜 40이라는 수가 나왔는지 궁금해서 메모리 영역, 컴퓨터 동작 원리 등등을 찾아봤지만 끝내 해답을 얻지 못했습니다.

40이라는 숫자가 어떻게 나온 것일까요

1
서현집 프로필

연산자 오버로딩 질문 서현집 13일 전

연산자 오버로딩 

C2678 이항 '+': 왼쪽 피연산자로 'Cents' 형식을 사용하는 연산자가 없거나 허용되는 변환이 없습니다. cpractice1

뒤에 추가하려고 하면 위와 같은 오류가 뜨는데 이유가 궁금합니다.

감사합니다

3
audtn7498 프로필

(재질문)피보나치 수열 std::vector와 iteration을 이용해 푸는데 오류가 발생합니다 audtn7498 13일 전

코드 링크: https://onlinegdb.com/HkSbD5Df8

visual studio 상에서 실행은 되지만 위와같이 오류가 발생합니다

어떤 것을 고치면 될까요?

1
minho9259 프로필

값으로 전달에 대해 질문드립니다. minho9259 14일 전

안녕하세요?

using namespace std;

void doSomething(int x)

{

cout << "In func " << x << " " << &x << endl;

}

int main()

{

doSomething(5);

doSomething(6);

int x = 6;

cout << "In main " << x << " " << &x << endl;

doSomething(x); // 6이 argument로써 parameter로 전달됨

doSomething(x + 1);

return 0;

}

결과

In func 5 010FF9F4

In func 6 010FF9F4

In main 6 010FFAC8

In func 6 010FF9F4

In func 7 010FF9F4

위 코드 진행과정이

1. doSomething(5)를 실행하면 매개 변수 x가 생성되고 값 5가 복사된다.

2. cout을 실행한다.

3. 매개 변수는 지역 변수이므로 doSomething함수가 종료되면서 사라진다.

4. doSomething(6)을 실행하며 위 과정을 반복한다.

이렇게 되는데, 3번에서 4번으로 넘어가면서 매개 변수가 사라지잖아요? 그런데 doSomething(6)을

실행하면 x의 메모리가 doSomething(5)에서의 메모리와 같고 인수가 무슨 값이 복사되든 메모리 주소가 동일한 결과를 얻었습니다.

제가 처음에 생각했을 때는 doSomething(6)이 실행되면서 또 매개 변수가 선언되니까  기존의 doSomething(5)와 다른 메모리 주소를 사용할 거라 생각했는데 그게 아니네요.

애초에 OS에서 인수값으로 무슨 값이 들어오든 너는 이 메모리 주소를 할당 해줄테니까 이 주소만써 이렇게 명령하고 그 메모리 주소를 기억하고 있는건가요?

아니면 x의 주소를 기억하는 포인터가 생성되면서 x는 함수가 종료되면서 사라지더라도 x의 메모리 주소를 기억하는 포인터를 통해 x의 주소를 기억해내는 건가요?

궁금한게 너무 많네요.. ㅜㅜ 

1
minho9259 프로필

동적 메모리할당 질문 드립니다. minho9259 14일 전

안녕하세요? 

using namespace std;

int main()

{

int* ptr = new int{ 7 }; // OS로부터 받아온 4바이트짜리 메모리주소가 저장이 된다.

cout << ptr << endl;

cout << *ptr << endl;

cout << &ptr << endl;

delete ptr; // OS에 메모리를 돌려줌

//ptr = nullptr;

cout << "Afer delete" << endl;

cout << ptr << endl;  //nullptr을 안해주면 가리키는 메모리 주소가 바뀌어 버린다.

//cout << *ptr << endl;

cout << &ptr << endl; // 포인터 변수를 삭제하는 것이 아니다.

return 0;

}

위 코드에서 ptr = nullptr을 해주지 않으면 cout << ptr을 했을 때 아예 다른 주소를 가리키게 되는데요.

실제로 위 코드를 돌리면

ptr :01480550

*ptr : 7

&ptr : 012FFA14

Afer delete

ptr : 00008123

&ptr: 012FFA14

다음의 결과가 출력이 됩니다. 그럼 delete후에 ptr이 가리키는 주소는 어떤 주소인가요? 아무 의미 없는 주소인지 아니면 의미는 있지만 아직 배우지 않은 것인지 궁금합니다.

또 참조와 const 에서 궁금한 게 있습니다.

참조는 보통 메모리 값이 있는 l-value를 받잖아요.

근데 리터럴을 받기 위해서는 const int &ref = 6; 이런식으로 받으면 가능하다라고 강의에서 말씀하셨는데 위 문장이 어떻게 작동되는건지 자세하게 알고싶습니다.

참조는 객체의 별칭으로 사용되는 것 아닌가요? 위 문장은 그럼 누구의 별칭으로 사용되는 건가요?

C++를 첫 언어로 공부 중인데 제 기준에서 쉽지 않다보니 궁금한 것도 이해 안 되는 것도 많은데 그 점이 너무 재미가 있네요.

1
jyk2367 프로필

cout<< 연산자가 궁금해졌습니다 jyk2367 14일 전

조건부연산자 강의 마지막에 괄호로 싸는 이유를 한번 생각해 보라고 하셔서 궁금한게 생겼습니다

cout뒤에 늘 붙는 <<연산자와 cin 에 붙는 >>연산자는

https://blog.naver.com/literate_t/221595486714

블로그 내 표에서 나오는 비트 왼쪽 쉬프트와 오른쪽 쉬프트 인가요?

그래서 <<연산자 먼저 처리될수 있어서 미리 괄호를 쳐 주는 것이죠?

1
audtn7498 프로필

피보나치 수열 std::vector와 iteration을 이용해 푸는데 오류가 발생합니다 audtn7498 15일 전

52번째 줄에서 error가 발생하는데 error의 의미를 잘 파악 못해서 해결을 못하고 있습니다 ㅠ

어떤 것을 바꾸면 해결될까요??

1
jyk2367 프로필

연습문제 재질문입니다 jyk2367 18일 전

#include <iostream>

int main()

{

using namespace std;

bool b;

cin >> b;

cout << std::boolalpha;

cout << "Your input : " << b << endl;

int num;

cin >> num;

if (num % 2)

cout << "홀수" << endl;

else

cout << "짝수" << endl;

return 0;

}

----------------------------------------------------------

자료형에 문제가 있다고 하셨는데

bool 자료형은 0이면 false고 그 외의 수는 true로 알고있었는데

이게 밑에 있는 num변수에 무슨 영향을 줬길래

0, 1을 제외한 다른 수를 넣었을때 짝수로만 나올까요?

bool이 0이나 1말고는 받지 않아서 그런건가요?

num은 따로 받는거라 위에 있는 b 변수랑 아무 연관 없는줄 알았는데......

2
jyk2367 프로필

연습문제 궁금한점이 있습니다 jyk2367 18일 전

해보면서 공부중이였는데 

1을 넣었을땐 잘 됬는데 2,3,4~~~를 했을때랑 값이 다르게 나옵니다

저가 생각하기에는 앞에 있는 boolalpha관련되서 잘못된거같은데 뭐가 틀렸는지 궁금합니다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

#include <iostream>

int main()

{

using namespace std;

bool b;

cin >> b;

cout << std::boolalpha;

cout << "Your input : " << b << endl;

int num;

cin >> num;

if (num % 2)

cout << "홀수" << endl;

else

cout << "짝수" << endl;

return 0;

}

2
이윤석 프로필

class 내에서 vector 초기화 시에 에러 이윤석 21일 전

#include <iostream>
#include <vector>

using namespace std;

class Node
{
private:
    vector<int> node_data(3,0);
    vector<int> test{0,0,0};
};

vector를 초기화 하는 부분에서 node_data(3,0)이 아래의 에러가 뜨더라고요.

error: expected ',' or '...' before numeric constant

{}로 초기화하면 에러가 안뜨는데 ()로 초기화하면 왜 에러가 뜨는 지 궁금합니다.

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스