-
class_lab11.cpp 참조에 의한 호출C++/class 2022. 6. 8. 14:29
값에 의한 호출
1. int형, double형, ...
2. 지역변수이기 때문에 변수의 값을 교환할 수 없다.
참조에 의한 호출(포인터 이용)
같은 메모리값을 공유하기 때문에 변수의 값을 교환할 수 있다.
Key Point
1. 값을 교환하는 방법
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
2. 값에 의한 호출과 참조에 의한 호출 차이점
- swap(int 형 변수 a,b)
- swap(&a, &b)
// // main.cpp // pointer II // // Created by yeonsu on 2022/06/08. // #include <iostream> using namespace std; // ====================== < 값에 의한 호출 > ======================= void swap(int x, int y); // ====================== < 참조에 의한 호출 > ====================== void swap(int *px, int *py); //포인터 이용 int main(){ // ====================== < 값에 의한 호출 > ======================= cout << "\n<값에 의한 호출>\n\n"; int a = 100, b = 200; cout << "swap() 호출 전 : x = " << a << ", y = " << b << endl; swap(a, b); cout << "swap() 호출 후 : x = " << a << ", y = " << b << endl; // ====================== < 참조에 의한 호출 > ====================== cout << "\n\n<참조에 의한 호출>\n\n"; a = 100, b = 200; cout << "swap() 호출 전 : *px = " << a << ", *py = " << b << endl; swap(&a,&b); cout << "swap() 호출 후 : *px = " << a << ", *py = " << b << endl << endl; return 0; } // ====================== < 값에 의한 호출 > ======================= void swap(int x, int y){ int tmp; cout << "In swap(): x = " << x << ", y = " << y << endl; tmp = x; x = y; y = tmp; cout << "In swap(): x = " << x << ", y = " << y << endl; } // ====================== < 참조에 의한 호출 > ====================== void swap(int *px, int *py){ int tmp; cout << "In swap(): *px = " << *px << ", *py = " << *py << endl; tmp = *px; *px = *py; *py = tmp; cout << "In swap(): *px = " << *px << ", *py = " << *py << endl; }
실행결과
함수가 2개 이상의 결과를 반환해야 하는 경우(slope.cpp)
[기본 개념] 함수는 1개의 반환값만을 가질 수 있다.
참조에 의한 호출을 이용해서 기울기와 y절편을 반환값으로 가질 수 있는 코드를 작성해보자.
// // slope.cpp // pointer II // // Created by yeonsu on 2022/06/08. // #include <iostream> using namespace std; int get_line_parameter(int x1, int y1, int x2, int y2, float *slope, float *yintercept){ if (x1 == x2){ return -1; //위치 동일 -> 수직선이 되기 때문에 기울기값을 구할 수 없음 } else{ *slope = (float)(y2-y1) / (float)(x2-x1); *yintercept = y1 - (*slope) * x1; } return 0; } int main(){ float s, y; if(get_line_parameter(3,3,6,6, &s, &y) == -1) cout << "에러" << endl; else cout << "기울기는 " << s << endl << "y절편은 " << y << endl; return 0; }
실행결과
'C++ > class' 카테고리의 다른 글
[C++] 클래스에 대한 이해(Car.cpp) (0) 2022.06.24 [C++] 함수가 여러 개의 값을 반환해야하는 경우 (0) 2022.06.15 [C++] 외부 파일에서 데이터 읽어오기(fstream, infile) (0) 2022.06.14 [C++] 문자열(string) (0) 2022.06.09 class_lab10.cpp 포인터의 개념 (3) 2022.05.25