포인터 방식(주소전달)
    void a() {
        int i = 0;
        b(&i);
    }
    void b(*b) { 
        *b = 100; 
    }   

러퍼런스 방식
    void a {
        int i = 0;
        b(i);
    }
    void b(&b) {
        b = 100;
    }    


호출방식에 따른 인자 값의 변화
언어 호출방식 대상 작업 호출쪽 값변경 sample
c++ call by value 일반변수 값 변경 X t(int a) {a=777;}
class 멤버변경 X t(A a) {a.m = 7;}
class 새객체 X t(A a) {A aa; a=aa}
call by pointer 일반변수 pointer연산 O t(int *a) {*a = 7;}
일반변수 pointer변경 X t(int *a) {a=&b;}
class pointer연상 O t(A *a) {a->m=7;}
class pointer변경 X t(A *a) {a = new A;}
call by reference 일반변수 reference인수 O t(int &a) {a=7;}
class reference인수 O t(A &a) {a.m=7;}
java
/c#
call by value primitive 값 변경 X t(int a) {a=7;}
class 멤버변경 O t(A a) {a.m = 7;}
class 새참조 X t(A a) {a = new A}
c# call by reference primitive reference인수 O t(ref int a) { a=9; }
class reference인수
(멤버변경)
O t(ref A a) { a.m=7; }
  reference인수
(새참조)
O A a = new A();
t(ref o);
t(ref A b) {b = new A();}
call by reference
(반환호출)
primitive
/class
reference인수 O A a;
t(out a);
t(out A b) {b = new A();}


c++/c# 에서의 상속
    virtual method를 통해 class 상속 후 override.
    A, B, C, D라는 클래스가 있을 경우 B,C는 A를 상속하고 D는 B,C를 상속하는 경우와 같은
    다중상속의 경우 B,C에서 public virtual A로 상속하면 해결되지만 overhead가 생김.
    (virtual method, virtual class, 다중상속은 overhead가 큼)
    java는 모든 메소드가 virtual 임.

c++에서의 Interface Class : 모든 메소드를 virtual로 지정 후 상속.

'C++' 카테고리의 다른 글

Random 난수 생성하기  (0) 2010.10.13
SOCKET  (0) 2010.10.09
Windows Thread 와 Synchronization(동기화)  (0) 2010.10.06
자료구조  (0) 2010.09.30
VC++ 수행시간 체크  (1) 2010.09.15
IME(Input Method Editor)  (0) 2010.09.11
Visual C++ : window 생성 template  (0) 2010.09.10
PE (portable executable) 파일  (0) 2010.08.20