chapter 06. friend 와 static 그리고 const

21
Chapter 06. friend 와 static 와와와 const C++ 와와와와와

Upload: fisseha

Post on 23-Feb-2016

87 views

Category:

Documents


0 download

DESCRIPTION

C++ 프로그래밍. Chapter 06. friend 와 static 그리고 const. C++ 프로그래밍. Chapter 06-1. const 와 관련해서 아직 못다한 이야기. const 와 관련해서 아직 못다한 이야기. 이 객체의 데이터 변경을 허용하지 않겠다 !. const 로 선언된 객체를 대상으로는 const 로 선언되지 않는 멤버함수의 호출이 불가능하다 . const 와 함수 오버로딩. const 객체 또는 참조자를 대상으로 멤버함수 호출 시 const 선언된 멤버함수가 호출된다 !. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 06. friend 와  static  그리고  const

Chapter 06. friend 와 static 그리고

const

C++ 프로그래밍

Page 2: Chapter 06. friend 와  static  그리고  const

Chapter 06-1. const 와 관련해서 아직 못다한 이야기

C++ 프로그래밍

Page 3: Chapter 06. friend 와  static  그리고  const

3

const 와 관련해서 아직 못다한 이야기

이 객체의 데이터 변경을 허용하지 않겠다 !

const 로 선언된 객체를 대상으로는 const 로 선언되지 않는 멤버함수의 호출이 불가능하다 .

Page 4: Chapter 06. friend 와  static  그리고  const

4

const 와 함수 오버로딩

함수의 const 선언 유무는 함수 오버로딩의 조건이 된다 !

실행결과

const 객체 또는 참조자를 대상으로 멤버함수 호출 시 const 선언된 멤버함수가 호출된다 !

Page 5: Chapter 06. friend 와  static  그리고  const

Chapter 06-2. 클래스와 함수에 대한 friend 선언

C++ 프로그래밍

Page 6: Chapter 06. friend 와  static  그리고  const

6

클래스의 friend 선언

Girl 클래스에 대한 friend 선언 !

Girl 이 Boy 의 friend 로 선언되었으므로 ,

private 멤버에 직접접근 가능

friend 선언은 private 멤버의 접근을 허용하는 선언이다 .

friend 선언은 정보은닉에 반하는 선언이기 때문에 매우 제한적으로 선언되어야 한다 .

Page 7: Chapter 06. friend 와  static  그리고  const

7

함수의 friend 선언

이렇듯 클래스의 특정 멤버함수를 대상으로도 friend 선언이 가능하다 .

전역변수 대상의 friend 선언

private 멤버 접근

private 멤버 접근private 멤버 접근

Page 8: Chapter 06. friend 와  static  그리고  const

Chapter 06-3. C++ 에서의 static

C++ 프로그래밍

Page 9: Chapter 06. friend 와  static  그리고  const

9

C 언어에서 이야기한 static

실행결과

Page 10: Chapter 06. friend 와  static  그리고  const

10

static 멤버변수 ( 클래스 변수 )

static 변수는 객체 별로 존재하는 변수가 아닌 , 프로그램 전체 영역에서 하나만 존재하는 변수이다 .

프로그램 실행과 동시에 초기화되어 메모리 공간에 할당된다 .

Page 11: Chapter 06. friend 와  static  그리고  const

11

static 멤버변수의 접근방법

접근 case 1

접근 case 2

접근 case 3

실행결과

static 변수가 선언된 외부에서의 접근이 가능 하려면 , 해당 변수가 public

으로 선언되어야 한다 .

Page 12: Chapter 06. friend 와  static  그리고  const

12

static 멤버함수static 멤버변수의 특징과 일치한다 .

static 함수는 객체 내에 존재하는 함수가 아니기 때문에 멤버변수나 멤버함수에 접근이 불가능하다 .

static 함수는 static 변수에만 접근 가능하고 , static 함수만 호출 가능하다 .

Page 13: Chapter 06. friend 와  static  그리고  const

13

const static 멤버와 mutable

const static 멤버변수는 , 클래스가 정의될 때 지정된 값이 유지되는 상수이기 때문에 , 위 예제에서 보이는 바와 같이 초기화가 가능하도록 문법으로 정의하고 있다 .

mutable 로 선언된 멤버변수는 const 함수 내에서 값의 변경이 가능하다 .

Page 14: Chapter 06. friend 와  static  그리고  const

14

확인 문제C6-1 accountNumber 와 balance 를 데이터 멤버로 갖는 BankAccount 클래스와 적절한 구동프로그램을 작성하시오 . accountNumber 는 1번부터 자동으로 부여되게 하되 static 멤버데이터

(numberOfAccounts) 를 이용하시오 . 아래와 같이 객체를 구성할 경우 두 BankAccount 객체의 accountNumber 는 서로 달라지도록 하시오 .

BankAccount account2(100000); BankAccount account3(account2);

C6-2 MyMath 라는 클래스에 원주율 PI 를 static 멤버로 선언하고 이를 이용해 원의 면적을 계산하는 프로그램을 작성하시오 .

Page 15: Chapter 06. friend 와  static  그리고  const

15

확인 문제 C6-3 아래 프로그램의 (A) 부분에 두 객체에 각각 show 를 호출하는 명령을 추가하고 프로그램의 실행 결과를 예측하고 문제점을 지적한 후 올바르게 수정하시오 .

class Number {private:

int n;public:

Number(int number): n(number) {cout << "Number(" << n << ")

constructted!" << endl;}~Number() {

cout << "Number(" << n << ") destructed!" << endl;}void show() {

cout << n << endl;}

};

void createObjects(int i) {Number n(i);Number *p = new Number(i+1);// (A)

}

int main() {

for (int i=0; i<3; i++) {createObjects(2*i);cout << endl;

}return 0;

}

Page 16: Chapter 06. friend 와  static  그리고  const

16

실습 문제P6-1 아래와 같은 멤버변수를 갖는 Person 클래스를 작성하고 C6-3 프로그램과 같은 뼈대의 프로그램을 작성하되 정적할당과 동적할당의 경우 모두 ( 메모리가 새는 ) 문제가 없도록 하시오 .

char *name;

참고int main() {

char *names[] = {" 갑 ", " 을 ", " 병 ", " 정 ", " 무 ", " 기 "};for (int i=0; i<3; i++)

createObjects(names[i], names[i+1]);return 0;

}

Name( 갑 ) constructted!Name( 을 ) constructted!갑을Name( 을 ) destructed!Name( 갑 ) destructed!

Name( 을 ) constructted!Name( 병 ) constructted!을병Name( 병 ) destructed!Name( 을 ) destructed!

Name( 병 ) constructted!Name( 정 ) constructted!병정Name( 정 ) destructed!Name( 병 ) destructed!

계속하려면 아무 키나 누르십시오 . . .

Page 17: Chapter 06. friend 와  static  그리고  const

17

실습 문제P6-2 위 문제에 다음과 같은 기능을 추가하고 이 기능들이 작동함으로 보이시오 .

Person 객체마다 고유번호 (id) 가 자동으로 부여되도록 하되 고유번호는 1000 번부터 오름차순으로 순차적으로 부여되도록 하며 한번 부여된 고유번호는 다시는 재부여되지 않는다 . 고유번호를 자동으로 부여할 때 static 멤버변수를 활용하시오 . Person 클래스는 현재 존재 하는 Person 객체의 수를 반환하는 static 함수

(getNumberOfPersons) 를 갖는다 . Person 클래스는 지금까지 존재했거나 현재 존재하는 모든 Person 객체의 수를 반환하는 static 함수 (getNumberOfPersonsEver) 를 갖는다 .

Page 18: Chapter 06. friend 와  static  그리고  const

18

Person(Name= 갑 , Id=1000) constructted!Person(Name= 을 , Id=1001) constructted!현재 Person 객체 수 : 2갑 , 1000을 , 1001Person(Name= 을 , Id=1001) destructed!Person(Name= 갑 , Id=1000) destructed!

Person(Name= 을 , Id=1002) constructted!Person(Name= 병 , Id=1003) constructted!현재 Person 객체 수 : 2을 , 1002병 , 1003Person(Name= 병 , Id=1003) destructed!Person(Name= 을 , Id=1002) destructed!

Person(Name= 병 , Id=1004) constructted!Person(Name= 정 , Id=1005) constructted!현재 Person 객체 수 : 2병 , 1004정 , 1005Person(Name= 정 , Id=1005) destructed!Person(Name= 병 , Id=1004) destructed!

존재했던 Person 객체의 총 수 : 6

계속하려면 아무 키나 누르십시오 . . .

Page 19: Chapter 06. friend 와  static  그리고  const

19

실습 문제P6-3 ( 객체 배열과 객체포인터 배열 ) P6-1 문제의 createObjects 함수에서 Person 객체배열과 Person 포인터배열을 만들고 여기에 각각 세 개씩의 Person 객체를 만들어 저장한 후 이들의 정보를 차례로 화면에 출력하도록 프로그램을 작성하시오 . main 함수에서 createObjects 함수 호출은 한 번만 하시오 .

참고int main() {

char *names[] = {" 갑 ", " 을 ", " 병 ", " 정 ", " 무 ", " 기 "}; // 문자를 가리키는 포인터들의 배열 !createObjects(names);cout << endl;return 0;

}

P6-4 (this 포인터와 참조자 반환에 관한 문제 ) int 타입 멤버변수 하나를 갖는 Number 클래스에 아래와 같은 작동이 가능하도록 멤버함수 add 를 추가하고 적절한 구동프로그램을 작성하시오 . add 함수 반환 때 새로운 객체가 만들어지지 않도록 하시오 .

Number n(0);n.add(1).add(2).add(3).add(4).show();

Page 20: Chapter 06. friend 와  static  그리고  const

20

실습 문제P6-5 (this 포인터와 참조자 반환에 관한 문제 ) 아래와 같은 작동이 가능하도록 문자열 포인터를 멤버변수로 갖는 Sentence 클래스를 작성하고 적절한 구동프로그램을 작성하시오 .

Sentence sentence(" 내 마음 ");cout << sentence.append(" 강나루 ).add(" 긴 언덕에 ").add(" 서러운 풀빛이

").add(" 짙어오것다 .").getString()

Page 21: Chapter 06. friend 와  static  그리고  const

Chapter 06 가 끝났습니다 .