4월, 2015의 게시물 표시

함수와 참조, 복사생성자

이미지
  1. c++에서 함수의 인자전달 방법    (1) call_by_value 작동과정  인수의 값을 전달함 ->  함수가 호출되면 매개 변수가 스택에 생성됨 ->  호출하는 코드에서 값을 넘겨줌 ->호출하는 코드에서 넘어온 값이 매개 변수에 복사됨  * 생성자와 소멸자의 비대칭 으로 실행되는 문제점이 있음.    (2) call_by_address 작동과정  인수의 주소를 전달 ( 함수의 매개 변수는 포인터 타입)  ->  함수가 호출되면 포인터 타입의 매개 변수가 스택에 생성됨  ->  호출하는 코드에서는 명시적으로 주소를 넘겨줌   * 호출하는 코드에서 넘어온 주소 값이 매개 변수에 저장됨    (3) call_by_reference 작동과정 함수의 매개 변수를 참조 타입으로 선언 *참조 매개 변수라고 부름( 참조 매개 변수는 실인자 변수를 참조함) *참조매개 변수의 이름만 생기고 공간이 생기지 않음 * 참조 매개 변수는 실인자 변수 공간 공유 * 참조 매개 변수에 대한 조작은 실인자 변수 조작 효과   2. 객체를 복사하는 코드   3. 객체복사시 복사 생성자가 실행됨.  (1) 얕은 복사 개념 :  객체의 멤버를 1:1로 복사함   *객체의 멤버 변수에 동적 메모리가 할당된 경우    사본은 원본 객체가 할당받은 메모리를 공유하는 문제 발생     (2) 깊은 복사 개념 : 객체의 멤버를 1:1로 복사함   *  객체의 멤버 변수에 동적 메모리가 할당된 경우     사본은 원본이 가진 메모리 크기 만큼 별도로 동적 할당하고      원본의 동적 메모리에 있는 내용을 사본에 복사함   * 완전한 형태의 복사라서 얕은 복사의 문제점인  사본과 원본이 메모리를 공유하는 문제가 없음

객체포인터와 객체배열, 객체의 동적생성

이미지
  1. 객체포인터    (1) 객체 포인터 변수선언방법 Circle *p; //Circle 타입에 대한 포인터변수p   (2) 포인터변수에 주소지정방법 ​ p = &donut; //도넛객체의 주소저장 Circle* p = &donut; //포인터 변수 선언시 주소로 초기화 가능   (3) 포인터를 이용한 객체 멤버접근 d = donut.getArea(); // 객체 이름으로 멤버를 접근함 d = p->getArea(); // 객체 포인터로 멤버를 접근할때는 ->를 쓴다  또는 d = (*p).getArea(); // 괄호를 넣어서 .을 쓸수도 있다.     [출처]   4. 객체포인터와 객체배열, 객체의 동적생성  | 작성자   jklj12 2, 객체배열   (1) 객체 배열 선언방법 ​Circle circleArray[3]; // Circle  객체의 배열 circleArray 를 선언   [출처]   4. 객체포인터와 객체배열, 객체의 동적생성  | 작성자   jklj12 ㅇ   (2) 객체 배열을 이용한 멤버접근 circleArray[0].setRadius(10); circleArray[1].setRadius(20); circleArray[2].setRadius(30); ​   [출처]   4. 객체포인터와 객체배열, 객체의 동적생성  | 작성자   jklj12   (3) 객체배열 소멸순서 circleArrat[2] 소멸자 실행 -> ​ circleArrat[1] 소멸자 실행 ->  circleArrat[0] 소멸자 실행 (생성자 역순으로 소멸) 객체배열도 생성자 역순으로 소멸됨 ​   [출처]   4. 객체포인터와 객체배열, 객체의 동적생성  | 작성자   jklj12 3. 정적할당 개념 프로그램 실행 전에 미리 할당 받는것으로  Java의 경우 static이 정적에 해당됨 stack과  data 영역에 컴파일시 할당되어야 할 메모리들로 , 전역변수 지역변수가 정적부분에 해당됨   [출처]   4. 객체포인터와 객체