본문 바로가기

예전/C, C++

(39)
call by ~ call by Valuecall by Reference #include void func(int a)// call by Value { printf("value : %d\n", a); printf("addr : %x\n\n", &a); } void func(int* ptr)// call by Reference { printf("value : %d\n", *ptr); printf("addr : %x\n\n", ptr); } int main() { int x = 10; printf("value : %d\n", x); printf("addr : %x\n\n", &x); func(x); func(&x); return 0; } 위 코드를 실행하면, 위와 같다. x와 a의 주소는 다르다. 즉 다른 변수이다.하지만, ..
char* char[] 을 검색해봤당 알고리즘 풀다가char* char[] 을 검색해봤당 https://kldp.org/node/114515 #include const char* ReturnStr(int n) { const char* str1 = "abc"; const char str2[] = "def"; if(n == 0) return str1; return str2; } int main() { const char* str; str = ReturnStr(0); printf("%s\n",str); str = ReturnStr(1); printf("%s\n",str); return 0; } const char* str1 = "abc";const char str2[] = "def; "abc"가 const 영역에 잡힌다. str1 은 "abc" ..
visual studio warning 무시 하는 방법 이렇게 같은 warning이 자주날 때, warning을 무시하는 방법!! 속성 -> 구성 속성 -> C/C++ -> 고급 -> 특정 경고 사용 안 함 에 warning 숫자를 적어주면 된다. 또는 #pragma warning(disable : 4005) 이렇게 쓰면 된다. 근데 되도록이면 잡고가는게 좋을 듯 .....
[C++] binding binding은 값을 할당한다. 혹은 A와 B를 연결한다는 뜻을 가졌다. 프로그래밍에서는 정적 바인딩과 동적 바인딩 2개의 바인딩이 있다. 정적 바인딩(static binding)이란 컴파일 시간에 결정 되는 것으로 속도가 빠르다. [C++, C#] 동적 바인딩(dynamic binding)은 컴파일 시간에 기계어 코드를 생성하고, 실행시간에 호출 되는 것이다. 실행 하고 조사하는 것으로 성능 저하가 있다. [java, objective-C,C++의 virtual function] #include using namespace std; class Animal { public: void Cry(){cout
[C++] upcasting #include using namespace std; #include class Animal { public: void Cry() {cout Cry(); vectorv1;// Dog만 보관 vectorv2; // 모든 동물을 보관 Animala; foo(&a);// 1 Dogd; foo(&d);// 2 } 부모 포인터 pA에 자식 객체 Dog의 주소를 담을 수 있다.일반함수 foo는 Animal의 포인터를 받아 cry()를 출력하는 함수이다. foo에 자식 객체 d가 들어가서 제대로 cry가 출력되는 것을 알 수 있다. 이렇게 부모 포인터에 자식 객체의 주소를 담는 것을 upcating이라고 한다.upcasting은 public 상속일 때만 된다. private 상속이면 Dog의 객체에서 Cry를 부를 ..
[C++] 일반 함수 포인터, 멤버 함수 포인터 class Dialog { public: // 멤버 함수 void Close() {} // 정적 멤버 함수 static void Open() {} }; // 일반 함수 void foo() {} int main() { void(*f1)() = &foo;// 1 void(*f2)() = &Dialog::Close;// 2 void(*f3)() = &Dialog::Open;// 3 f3(); } 위의 main에서 1은 가능하지만, 2는 불가능하다.즉, 1. 일반 함수 포인터에 멤버 함수 주소를 담을 수 없다.2. 하지만, 일반 함수 포인터에 정적 멤버 함수의 주소는 담을 수 있다. (static은 this 없이도 부를 수 있으니까) int main() { // 멤버함수의 주소를 담는 포인터 void(Dialo..
[C++] static 멤버 변수, 함수 static 멤버 변수, 함수 ( http://blog.daum.net/coolprogramming/67 ) http://showmiso.tistory.com/95 에서 보통 함수의 지역 변수는 stack 영역에 저장되지만, static 으로 선언한 지역 변수는 메모리 영역 중 static영역에 저장되어 프로그램이 종료할 때까지 사라지지 않는다. 라고 했습니다. class A { int a; static int b; public: void func1() {} static void func2() {} }; int main() { A a; } class A의 객체 a를 선언하게 되면, A의 멤버 변수와 멤버 함수는 이 객체의 인스턴스 멤버 변수, 멤버 함수가 된다.하지만, static 멤버 변수와 stati..
[C] memmove와 memcopy [참고] http://cky5122.blog.me/80170431711http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=826