@ 16. 1 ~ 17. 1/C++
-
참조형 관련@ 16. 1 ~ 17. 1/C++ 2014. 6. 30. 22:36
참조형은 대부분 함수 / 메서드의 파라미터 이다 이유는? 값에 의한 전달이 아닌 원본 자체가 넘겨지는 참조에 의한 전달을 할 수 있기 때문에.. 아래와 같은 함수가 있다면 void swap(int &first, int &second) 함수는 아래처럼 사용한다. int x=5, int y=6; swap(x,y) 보통의 참조형 변수를 상숫값으로부터 초기화할 수 없듯이 참조형 파라미터의도 상숫값을 인자로 못받음. 아래는 안됨 swap(5,6); 만약 포인터로부터의 참조라면.. 함수의 인자로 사용할 변수가 포인터이고 위의 swap함수를 사용한다면. int x=5, int y=6; int *xp=&x, int *yp=&y; swap(*xp, *yp); 이렇게 하면 된다. 그리고 되도록이면 파라미터를 참조형으로 하..
-
메서드 오버라이딩(virtual)의 특수한 경우들@ 16. 1 ~ 17. 1/C++ 2014. 6. 28. 23:25
1. 부모클래스의 메서드가 static인 경우 C++에서는 static 메서드를 오버라이딩할 수 없다. 라는 사실만으로 알고 있자..ㅎㅎ 2. 부모클래스의 메서드가 오버로딩된 메서드인 경우 특정 이름과 파라미터로 메서드를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모클래스의 모든 메서드들이 숨겨진다. A클래스 virtual void sh(); virtual void sh(int i); B클래스 : public A클래스 virtual void sh(); 하게 되면 B클래스.sh(1)는 호출이 안된다. 근데 아래 처럼 포인터로 접근하면.. B b; A *ptr=&b; ptr->sh(1) 은 된다.. 또 다른것으로는 using을 사용하면 오버라이딩 구현을 일부에만 적용하고 나머지는 부모클래스(A..
-
포인터 상속 virtual 객체 자꾸 까먹네.@ 16. 1 ~ 17. 1/C++ 2014. 6. 26. 23:36
A B : public A C : public B 이런경우 A* = new A B C; 라면 virtual의 경우 각 new의 ABC에 해당되는 virtual 함수가 실행됨. 그리고 new의 경우 아래단위로 밖에 안됨 B* = new A 는 안됨 new B C는 됨.. virtual함수가 아닌 일반함수의 경우 A* = new ABC라면 new ABC와는 상관없이 A의 일반함수만 호출됨...B*이면 B의 일반함수와 A의 일반함수가. 나만 읽고 쓰기 편하게 정리..
-
Tip : 메모리 해제, static 메서드@ 16. 1 ~ 17. 1/C++ 2014. 4. 27. 19:56
동적으로 할당한 메모리는 사용이 끝난 후 반드시 해제를 해주어야 한다. 만약 객체 안에서 동적으로 메모리를 할당했다면 그 메모리에 대한 해제는 객체 소멸자 안에 수행되는 것이 가장 바람직하다. static 메서드를 선언하려면 const를 빼야한다. static메서드는 객체에 묶이지 않기 때문에 객체에 변경을 가하지 않는다라는 시맨틱이 더는 적용될 수 없기 때문이다. static메서드는 연결된 객체가 없으므로 코드 구현부에서 this 포인터를 이용할 수 없다.