1 / 25

10 장 클래스와 객체

10 장 클래스와 객체. 4 조 김현 , 안정환 , 이호윤 , 장동식. 목 차. 1. 클래스 ?. 2. 객체 ?. 3. 생성자 , 소멸자 , 복사생성자 ?. 4. 발전 방향. 5. 출처. 6. Q&A. 1. 클래스 (1-1). ㆍ 사용자 정의 데이터형의 일종으로 , 데이터를 표현하는 것과 데이터를 처리하는 멤버함수를 하나의 패키지로 구성함 ㆍ C++ 언어에서 객체의 속성을 정의하는 수단으로 객체 지향 프로그래밍의 추상

Download Presentation

10 장 클래스와 객체

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. 10장 클래스와 객체 4조 김현,안정환,이호윤,장동식

  2. 목 차 1 클래스? 2 객체? 3 생성자,소멸자,복사생성자? 4 발전 방향 5 출처 6 Q&A

  3. 1.클래스(1-1) ㆍ사용자 정의 데이터형의 일종으로, 데이터를 표현하는 것과 데이터를 처리하는 멤버함수를 하나의 패키지로 구성함 ㆍC++언어에서 객체의 속성을 정의하는 수단으로 객체 지향 프로그래밍의 추상 자료형 및 자료의 은닉 개념 지원함 ㆍ객체 지향 프로그램밍은 문제의 주제, 핵심부 분인 클래스를 중점으로 인스턴스 객체를 묘 사하는데 요구 데이터를 생각한 후 데이터(객 체)를 중심으로 멤버함수 작성함

  4. 1.클래스(1-2) ㆍ클래스선언형식 class 클래스명{ [private :] 자료 선언; 함수 선언; [protected :] 자료 선언; 함수 선언; public : 자료 선언; 함수 선언; } [객체 변수]; 클래스명 객체변수1, 객체변수2, ... ; - 클래스는 C언어 구조체 선언과 비슷함 - 다른 점은 속한 멤버가 데이터뿐만 아니라 함수까지포함

  5. 1.클래스(1-3) • Private부 public부 protection부로 나뉨 • private부는 전용 부분 - 이 영역에서 정의된 함수나 데이터는 오직 해당 객체 내부의 멤버 함수만이 사용할 수 있음 - 외부에 대해 데이터를 은닉(보호)함 - 함부로 변경되어서는 안 될 자료와 객체 외부에서는 사용 되어서는 안 될 멤버 함수를 정의함 • public부는 공용부분 - 주로 클래스 외부에서 사용될 수 있는 데이터나 멤버 함수를 선언함 - 이 부분에서 선언된 멤버 함수만이 은닉된 데이터를 사용할 수 있음 - 클래스 정의 시 private 키워드가 생략 public 키워드가 나올 때까지를 전용 멤버로 간주

  6. 1.클래스(1-4) • 클래스 멤버 함수 선언과 사용법 - 클래스의 멤버는 자료형 뿐만 아니라 함수도 포함 • - 함수의 본체 내용은 직접 클래스 내부나 또는 클래스 • 외부에서 정의 • 클래스 내부에서 멤버 함수 정의 • - 클래스 내부에서 함수의 본체가 기술된 멤버함수는 • 모두 확장함수(inline function)로 정의 class 클래스명 { …… 자료형 함수명(인수 선언) { 함수 본체 } …… }

  7. 1.클래스(1-5) • 클래스 내부에서 멤버 함수 예 #include <iostream.h> class Circle { double Radius; public : double Circle_Area() { Radius = 5.0; return (3.14 * 5.0 * 5.0); } }; int main() { Circle Cir1; cout << "원의 면적은 " << Cir1.Circle_Area() << "입니다" << endl; return 0; } • 실행 결과 화면

  8. 1.클래스(1-6) • 클래스 외부에서 멤버 함수 정의 -보통 본체 내용이 길어질 경우 주로 사용 - 클래스 내부에서는 함수의 원형만 선언하고 클래스 외부에 함수의 본체를 기술함 class 클래스명 { …… 자료형 함수명(인수 선언); …… } 자료형 클래스명::함수명(인수 선언) { 함수본체 }

  9. 1.클래스(1-7) • 클래스 외부에서 멤버 함수 예 #include <isotream.h> class Circle{ double Radius; public : double Circle_Area(); }; double Circle::Circle_Area() { Radius = 5.0; return(3.14 * 5.0 * 5.0); } int main() { Circle Cir1; cout << “원의 면적은” << Cir1.Circle_Area() << "입니다" << endl; return 0; } • 실행 결과 화면

  10. 2.객체(1-1) • 클래스를 정의한 다음 객체를 선언하여 사용 • 클래스만을 정의했을 때는 메모리가 할당되지 않고 객체가 클래스를 기반으로 선언되었을 때 메모리 할당이 일어남 class Login {    char id[10];    char pwd[10]; public:    long number; }; Login Kim, Lee, Park; Class Login { private 멤버 id와 pwd 변수 public 멤버 number 변수 } Kim, Lee, Park 3개의 객체를 선언 [각 객체들의 구조]

  11. 2.객체(1-2) ㆍ객체의 복사 • - 같은 클래스 형으로 선언된 객체 간에는 자료의 • 이동이 가능 • - 예를 들어 같은 클래스 형의 객체 a, b가 있을 때 • 객체 b를 객체 a에 대입하면 객체 b의 모든 내용이 • 객체 a에 복사

  12. 2.객체(1-3) • 객체의 복사 예 int main() {     String str1, str2;     str1.set("The first string");     str2.set("This is the second string");     str1.prn();     str2.prn();     cout << "\n================= =========\n";    str1 = str2;  //객체 복사    str1.prn();    str2.prn();    return 0; } #include <iostream.h> #include <string.h> class String {    char *str;    int len; public:    void set(char *cp);     void prn(); }; void String::set(char *cp) {     len = strlen(cp);    str = new char[len+1];     strcpy(str, cp); } void String::prn() {      cout << "문자열 : " << str      << "(" << len << ")" << endl; } • 실행 결과 화면

  13. 2.객체(1-4) ㆍ함수에서의 객체 인수 전달 - 객체의 자료도 다른 일반 자료와 마찬가지로 함수의 인수로 전달됨 - 인수로 전달되는 객체 자료는 값에 의한 인수 전달 방 식으로 전달됨 • - 함수 호출 시 전달되는 실인수 값이 호출된 함수의 • 가인수에 복사되어 전달됨 • - 호출된 함수 내에서 가인수가 변하여도 호출한 함수의 • 실인수에는 영향을 미치지 않음

  14. 2.객체(1-5) ㆍ함수에서의 객체 인수 전달 예 #include <iostream.h> class XY {   int x, y; public:   void set_xy(int a, int b) { x = a, y = b; }   int get_x() { return x; }   int get_y() { return y; } }; void swap(XY ob) {    ob.set_xy(ob.get_y(), ob.get_x());   cout << "== swap() ==\n";   cout << "x = " << ob.get_x() << ", y = " << ob.get_y() << endl; } int main() {     XY ob;     ob.set_xy(10, 20);    swap(ob);     cout << "\n== Main() ==\n";     cout << "x = " << ob.get_x() << ", y = " << ob.get_y() << endl;     return 0; } • 실행 결과 화면

  15. 2.객체(1-6) ㆍ함수에서의 객체 반환 -객체의 자료도 함수에서 반환(return) 할 수 있음 - 객체를 반환하는 함수의 정의 시에는 함수의 반환형 으로 클래스의 형을 기술

  16. 2.객체(1-7) ㆍ함수에서의 객체 반환예 String input() {    char text[80];    String temp;    cout << "Input String : ";    cin >> text;    temp.set(text);    return temp; } int main() {    String str1;    str1 = input();    str1.prn();    return 0; } #include <iostream.h> #include <string.h> class String {    char *str;    int len; public:    void set(char *cp);    void prn(); }; void String::set(char *cp) {    len = strlen(cp);    str = new char[len+1];    strcpy(str, cp); } void String::prn() { cout << "문자열 : " << str << "(“<< len << ")\n"; } • 실행 결과 화면

  17. 3.생성자(1-1) ㆍ멤버 변수의 초기화를 담당하는 함수를 생성자라고함 ㆍ생성자의 특징 ① 생성자 함수의 이름은 클래스 이름과 동일 ② 함수의 자료형을 지정하지 않음 ③ 함수의 호출은 명시적이지 않음 ④ 객체를 선언할 때 컴파일러에 의해 자동 호출 ⑤ 객체 초기화 == 멤버 변수 초기화 ㆍ디폴트 생성자 : 객체가 생성될 때 컴파일러에 의해 자동으로 호출되는 전달인자가 없는 생성자

  18. 3.생성자(1-2) ㆍ생성자 예제 • 실행 결과 화면 #include <iostream.h> class Circle { int Radius; public : Circle(int n) { // 생성자 cout << "생성자 호출...\n"; Radius = n; } double Area() {return (3.14 * Radius * adius); } }; int main() { Circle Cir(6); cout << "반지름이 6인 원의 넓이는 “<< Cir.Area()<< endl; return 0; }

  19. 3.소멸자(1-3) ㆍ객체가 선언되어 사용되는 블록이 끝날 때 자동으로 호출되는 함수 ㆍ객체가 생성될 때 동적으로 할당한 메모리가 있을 때 해제하는 코드를 소멸자 내에 작성하여 객체가 소멸할 때 같이 해제 할 때 사용 ㆍ소멸자의 특징 ① 멤버함수 ② 이름은 클래스 이름 사용 ③ 생성자 함수와 구분을 위해 ~를 붙임 ④ 리턴 타입을 지정하지 않음 ⑤ 함수 호출이 명시적이지 않음 ⑥ 객체 소멸 시 자동 호출 ⑦ 전달인자가 없다 ⑧ 오버로딩 불가능 ㆍ디폴트 소멸자는 아무 일도 하지 않으므로 객체가 소멸될 때 할 일이 있으면 반드시 명시적으로 기술

  20. 3.소멸자(1-4) • 소멸자 예제 #include <iostream.h> class Point { int xp, yp; public : Point(int x, int y) { //생성자 cout << "생성자 호출..\n"; xp = x, yp = y; } ~Point() { cout << "소멸자 호출..\n"; } // 소멸자 int get_x() { return xp; } int get_y() { return yp; } }; int main() { Point p(10, 20); // 생성자 호출 cout << "x 좌표 : " << p.get_x() << ", y 좌표 : " << p.get_y() << endl; return 0; } • 실행 결과 화면

  21. 3.복사생성자(1-5) ㆍ 객체 생성시 동일한 객체를 초기값으로 할 때 자동 으로 호출되는 멤버함수 ㆍ 디폴트 생성자처럼 c++컴파일러에 의해 자동으로 만들어지나 사용자가 재정의하여 사용함

  22. 3.복사생성자(1-6) ㆍ복사생성자 예제 Stud::~Stud() { cout << "소멸자 호출\n"; } void Stud::prn() { cout << "번호 : " << No << "\t“ << "이름 : " << Name << endl ; } int main( ) { Stud std[3]={Stud(), Stud(1101,"KimSD"), Stud(std[1]) }; //복사생성자호출 for(int i=0; i<3; i++) std[i].prn(); return 0; } #include<iostream.h> #include<string.h> class Stud { private : int No; char Name[10]; public : Stud(); Stud(int n, char na[]); ~Stud(); void prn(); }; Stud::Stud() { cout << "생성자1 호출\n"; No = 0; strcpy(Name, "nobody"); } Stud::Stud(int n, char na[]) { cout << "생성자2 호출\n"; No = n; strcpy(Name, na); } • 실행 결과 화면

  23. 4.발전 방향 ㆍ포인터에 대해서 공부를 하여 전 수업 시간에 이해가 가지 않았던 예제를 다시 풀어서 포인터에이해를 조금 더 높였다. #include<iostream.h> #include<string.h> int main() { char *name = NULL; int i; name = new char[10]; cout << "영문이름 입력 : "; cin >> name; for(i=0;i<=strlen(name)-1;i++) cout << "입력한 이름은 " << name+i cout << i <<" 번째 글짜는" << *(name+1) << "입니다" << endl; delete name; return 0; } • 실행 결과 화면 ㆍ클래스와 객체에 대한 전반적인 설명이 부족했던거 같다.

  24. 예제로 배우는 C++프로그래밍 윈도우즈 API(Win32 API) 전문 사이트(http://www.winapi.co.kr/) 1학기 C++강의자료 5.출처

  25. Q & A Q & A

More Related