글

함수 중복과 static 멤버

이미지
  1. 함수 중복 조건 중복된 함수들의 매개 변수 타입이 다르거나 개수가 달라야 함 중복된 함수들의 이름이 동일해야함   *리턴 타입은 함수 중복과 무관하다 2. 디폴트 매개변수 선언 및 호출 방법 (예제 6-3 소스코드) #include   <iostream> using   namespace  std; //원형 선언 void  star( int  a=5); void  msg( int  id,  string  text= "" ); // 함수 구현 void  star( int  a){   for ( int  i=0;i<a;i++)   cout <<  '*' ;  cout << endl; } void  msg( int  id,  string  text){  cout << id <<  ' '  << text << endl; } int  main(){   // star() 호출  star();  star(10);   //  msg () 호출  msg(10);  msg(10, "Hello" );   }   3. 디폴트 매개변수의 제약조건 디폴트 매개 변수는 보통 매개 변수 앞에 선언될 수 없음 ( 디폴트 매개 변수는 끝 쪽에 몰려 선언되어야 함) void calc(int a, int b=5, int c, int d=0); void sum(int a=0, int b, int c); <컴파일 불가> void calc(int a, int b=5, int c=0, int d=0); <컴파일 가능> 4. 디폴트 매개변수를 이용하여 함수 간소화 (예제 6-5 소스...

함수와 참조, 복사생성자

이미지
  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. 객체포인터와 객체배열, 객체의 동적생성  | 작성자 ...