1 / 21

Chapter 06. friend 와 static 그리고 const

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

fisseha
Download Presentation

Chapter 06. friend 와 static 그리고 const

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ 프로그래밍 Chapter 06. friend와 static 그리고 const

  2. C++ 프로그래밍 Chapter 06-1. const와 관련해서 아직 못다한 이야기

  3. const와 관련해서 아직 못다한 이야기 이 객체의 데이터 변경을 허용하지 않겠다! const로 선언된 객체를 대상으로는 const로 선언되지 않는 멤버함수의 호출이 불가능하다.

  4. const와 함수 오버로딩 const 객체 또는 참조자를 대상으로 멤버함수 호출 시 const 선언된 멤버함수가 호출된다! 실행결과 함수의 const 선언 유무는 함수 오버로딩의 조건이 된다!

  5. C++ 프로그래밍 Chapter 06-2. 클래스와 함수에 대한 friend 선언

  6. 클래스의 friend 선언 Girl 클래스에 대한 friend 선언! friend 선언은 private 멤버의 접근을 허용하는 선언이다. Girl이 Boy의 friend로 선언되었으므로, private 멤버에 직접접근 가능 friend 선언은 정보은닉에 반하는 선언이기 때문에 매우 제한적으로 선언되어야 한다.

  7. 함수의 friend 선언 이렇듯 클래스의 특정 멤버함수를 대상으로도 friend 선언이 가능하다. 전역변수 대상의 friend 선언 private 멤버 접근 private 멤버 접근 private 멤버 접근

  8. C++ 프로그래밍 Chapter 06-3. C++에서의 static

  9. C언어에서 이야기한 static 실행결과

  10. static 멤버변수(클래스 변수) static 변수는 객체 별로 존재하는 변수가 아닌, 프로그램 전체 영역에서 하나만 존재하는 변수이다. 프로그램 실행과 동시에 초기화되어 메모리 공간에 할당된다.

  11. static 멤버변수의 접근방법 접근 case 2 접근 case 1 접근 case 3 static 변수가 선언된 외부에서의 접근이 가능 하려면, 해당 변수가 public으로 선언되어야 한다. 실행결과

  12. static 멤버함수 static 멤버변수의 특징과 일치한다. static 함수는 객체 내에 존재하는 함수가 아니기 때문에 멤버변수나 멤버함수에 접근이 불가능하다. static 함수는 static 변수에만 접근 가능하고, static 함수만 호출 가능하다.

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

  14. 확인 문제 C6-1 • accountNumber와 balance를 데이터 멤버로 갖는 BankAccount클래스와 적절한 구동프로그램을 작성하시오. accountNumber는 1번부터 자동으로 부여되게 하되 static 멤버데이터(numberOfAccounts)를 이용하시오. 아래와 같이 객체를 구성할 경우 두 BankAccount객체의 accountNumber는 서로 달라지도록 하시오. BankAccount account2(100000); BankAccount account3(account2); C6-2 • MyMath라는 클래스에 원주율 PI를 static 멤버로 선언하고 이를 이용해 원의 면적을 계산하는 프로그램을 작성하시오.

  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(inti) { 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; }

  16. 실습 문제 P6-1 • 아래와 같은 멤버변수를 갖는 Person 클래스를 작성하고 C6-3 프로그램과 같은 뼈대의 프로그램을 작성하되 정적할당과동적할당의 경우 모두 (메모리가 새는) 문제가 없도록 하시오. char *name; 참고 int main() { char *names[] = {"갑", "을", "병", "정", "무", "기"}; for (inti=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! 계속하려면 아무 키나 누르십시오 . . .

  17. 실습 문제 P6-2 • 위 문제에 다음과 같은 기능을 추가하고 이 기능들이 작동함으로 보이시오. • Person 객체마다 고유번호(id)가 자동으로 부여되도록 하되 고유번호는 1000번부터 오름차순으로 순차적으로 부여되도록 하며 한번 부여된 고유번호는 다시는 재부여되지 않는다. 고유번호를 자동으로 부여할 때 static 멤버변수를 활용하시오. • Person 클래스는 현재 존재 하는 Person 객체의 수를 반환하는 static 함수(getNumberOfPersons)를 갖는다. • Person 클래스는 지금까지 존재했거나 현재 존재하는 모든 Person 객체의 수를 반환하는 static 함수(getNumberOfPersonsEver)를 갖는다.

  18. Person(Name=갑, Id=1000) constructted! Person(Name=을, Id=1001) constructted! 현재 Person 객체 수: 2 갑, 1000 을, 1001 Person(Name=을, Id=1001) destructed! Person(Name=갑, Id=1000) destructed! Person(Name=을, Id=1002) constructted! Person(Name=병, Id=1003) constructted! 현재 Person 객체 수: 2 을, 1002 병, 1003 Person(Name=병, Id=1003) destructed! Person(Name=을, Id=1002) destructed! Person(Name=병, Id=1004) constructted! Person(Name=정, Id=1005) constructted! 현재 Person 객체 수: 2 병, 1004 정, 1005 Person(Name=정, Id=1005) destructed! Person(Name=병, Id=1004) destructed! 존재했던 Person 객체의 총 수: 6 계속하려면 아무 키나 누르십시오 . . .

  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();

  20. 실습 문제 P6-5 (this 포인터와 참조자 반환에 관한 문제) • 아래와 같은 작동이 가능하도록 문자열 포인터를 멤버변수로 갖는 Sentence 클래스를 작성하고 적절한 구동프로그램을 작성하시오. Sentence sentence("내 마음 "); cout << sentence.append("강나루 ).add("긴 언덕에 ").add("서러운 풀빛이 ").add("짙어오것다.").getString()

  21. Chapter 06가끝났습니다.

More Related