교수님 저도 이 강의에서 13일전에 나왔던 질문자와 같은 질문이 있습니다. "두 코드를 비교하시면서 동적, 정적 바인딩의 차이를 설명해주셨는데, 결국 result나 func_ptr 모두 런타임에서 op값이 무엇이냐에 따라서 결정되는 것 아닌가요?" 이런질문이 있었는데 강의가 어느부분인지 표기해서 올리라고 하신 답글을 달아주셨네요. 여기에 덧붙여서 좀더 디테일하게 질문을 하자면, 결국 op를 cin으로 런타임에 받아서 그 op에 따른 케이스에따라 result 나 func_ptr이나 모두 결정되는 것이 아닌가합니다. 그래서 cout << result << endl;이나 cout << func_ptr(x,y) << endl; 이나 동일하게 런타임에 입력하는 op값에 따라 결정되는 것이 아닌가 생각합니다. 그래서 차이를 잘 모르겠습니다. 강의는 12.5 동적바인딩과 정적바인딩이고 1분15초쯤입니다. 교수님께서 질문을 하면 고민 더 해보라고 하시는 답글을 매번 해주시는 것 같아서 질문 전에 자료도 찾아보고 고민해봤는데 이 예제에서의 정적바인딩 동적바인딩 차이를 가늠하기가 좀 어렵네요 찾아보면 대부분이 예제를 int a = 0 이런걸 정적바인딩으로 설명해서 이미 컴파일타임에 a가 결정되는 이런걸 정적바인딩이라고 설명을 해놓아서 더욱 헷갈리는 것 같습니다. 교수님의 보다 자세한 의견을 듣고싶습니다.
class Base { public: int x; }; class Derived : Base { }; 상속받은 Derived옆에 Base의 접근지정자를 쓰지 않으면 private으로 접근지정자가 들어가는건가요? 접근지정자를 쓰지않아도 오류가 뜨지않는걸 보니 자동으로 뭔가가 들어가는거 같아요
#include <stdio.h> int main() { int a[105]={0,}; int n,t,j; int num; int sum=0; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } for(int i=1;a[i]!=0;++i) { for(j=i+1;a[j]!=0;++j) { if(a[i]<=a[j]) break; if(a[j+1]==0) { sum++; } } } printf("%d",sum); } 선생님 19번문제를 이렇게 풀면 채점결과 통과는합니다. 하지만 시간을 효율적으로 더 줄이기위해서 a[i]가 a[j]보다 작아서 break 되는순간 a[i]를 ++i를 이용하지않고 바로 a[j]부터 시작해서 비교를 하려는 생각을 해봤습니다. 55 34 46 89가 있으면 55가 89에 걸리는순간 89부터 검사를 하려구요 그래서 이렇게 다시 짜봤습니다. #include <stdio.h> int main() { int a[105]={0,}; int n,t,j; int num; int sum=0; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } for(int i=1;a[i]!=0;++i) { for(j=i+1;a[j]!=0;++j) { if(a[i]<=a[j]) { i=j; break; } if(a[j+1]==0) { sum++; } } } printf("%d",sum); } i=j를 넣는방식으로 짰는데 이러면 어떤건 통과하고 어떤건 통과가안되더라구요 그 이유가 뭔가요??
안녕하세요, 교수님. 좋은 강의 감사합니다. selection에 문자와 범위를 초과하는 수를 넣었는데 그림과 같이 무한으로 도는걸 발견했습니다. 디버깅으로 selection을 보면 문자일 때는 0으로 나왔습니다. selection에 문자나 엄청나게 큰 수를 넣으면 do-while 안에 내용이 왜 무한으로 도는 건가요??
9번 #include <iostream> using namespace std; int main(void) { int num,i,j=1; int sum; scanf("%d",&num); if(num>=5 && num <=50000) for(i=1;i<=num;++i) { sum=0; for(j=1;j<=i;++j) { if(i%j==0) sum++; } printf("%d ",sum); } } }이런식으로 코딩하면 n제곱이라고 알려주셨는데 반복문이 2개써서 n의 제곱인가요?? 선생님이 알려주신 시간이 더 적게 드는 방법도 반복문이 2개인데 이것의 시간복잡도를 구하는 방법은 없는건가요? 어떻게해서 nlog n보다는 덜 하다는 걸 구하셧는지 소스를 보고 시간복잡도를 대략적으로 구하는 방법이 궁금합니다!
break, continue가 block을 escape 혹은 skip 하는거라고 강의중에 설명해주셨는데, 이것들이 switch, for, while문에서만 해당하는 것인가요? 일반 block에서도 사용하는 사례가 있는지 궁금합니다. 다음은 a++ vs ++a 질문입니다. int count( 0 ) ; do { if (count== 5 ) continue ; cout << count << endl ; } while (++count< 10 ) ; // ++count vs count++; 위와 같은 경우에는 0 ~ 9 가 출력이되고 (5제외) int count( 0 ) ; do { if (count== 5 ) continue ; cout << count << endl ; } while (count++< 10 ) ; // ++count vs count++; 위의 경우에는 0~10이 출력이 됩니다. (5제외) debugger를 통해서도 확인해보았으나 아직 조금 헷갈리는 것 같습니다. operator priority는 a++ , ++a, > 이 순서라 일단 증가 되는게 둘다 먼저고 10과 비교 해서 되는 것 같은데, count++ <10의 경우에는 10까지 나오는지 잘 모르겠습니다. count 가 9일때 count++하면 10이되고 10<10 : false 이므로 count 10은 프린트가 안되야 할것 같거든요. 감사합니다.
제가 예전부터 포인터를 공부할 때마다 궁금했던게.. int *x; int y,z; 이렇게 선언 됐을때, x=&z; // 이건 되지만 y=&z; // 이건 안되는 이유가 굉장히 궁금했습니다. 뭐 이유는 당연히 주소는 포인터형 변수에 넣어야하기 때문이지만, 결국 변수의 주소라는것도 하나의 숫자로 표현된 값인데 왜 int형 변수에는 주소를 못담고 포인터형 변수에만 담을 수 있는걸까요? 1학년때 공부할 때 하도 궁금해서 주소가 숫자가 아니고 string인가 ? 해서 string변수에 담아봤지만 그것도 안됐던 기억이 나네요 ㅎㅎ; 저는 학부시절 공부할때 그래서 Address라는 숨은 '자료형'이 따로 있다고 그냥 스스로 생각했고, 후배들에게 멘토링을 해줄때도 그렇게 생각하면 편하다고 말해줬거든요. 이것도 보안상의 이유로 포인터 변수에 메모리주소를 직접 입력할 수 없는것과 같은 이치인가요 ? 학부시절 교수님께 부끄러워 못했던 질문을 여기서 해보네요.. 혹시 공부하다 저처럼 엉뚱한 의문을 갖는 수강생들이 있을까해서 한번 남겨봅니다 :)
안녕하십니까? 교수님 따배시 C++ 완강하고 게임문제 패키지 열심히 듣고있는 평범한 직장인 입니다.(유튜브도 정말 재밌게 보고있습니다.) 몇일째 해결되지 않는 문제가 있어서 문의드립니다. 지금것 문제가 없다가 금번 FMOD 예제 파일을 실행 할 때 C 라이브러리 함수들이 호환이 안되더라구요 ㅠ 지금 visual studio 에서 C++로 공부중인데 이상하게 해당 FMOD 예제 파일에서만 호환이 안됩니다.. 예를들면 conio.h, printf 와 같은 함수 및 헤더파일에 빨간 밑줄이 가며 Identify 하지 못한다고 나옵니다... ㅠ 혹시나 해서 새로 파일을 만들면 문제가 없는데 예제파일에서만 그런 문제가 발생하며 새로 다운도 받아보고 구글링으로 문제해결하려 노력해봤지만 방법이 보이지 않아 문의드립니다. 혹시 해결 방법이 있을까요?