SlideShare a Scribd company logo
1 of 21
9. 객체와 클래스 (고급)
차례 
• 생성자와 소멸자 
• 포인터 객체와 this 포인터 
• 프렌드 함수 
2/21
생성자 
• 생성자 
– 객체가 생성될 때 자동으로 호출되는 멤버 함 
수 
– 클래스 이름과 같아야 한다. 
– 함수 반환값은 없다. 
– public 접근 속성을 취해야 한다. 
– 변수를 선언하고 초기화하듯이 생성자는 객체 
생성 후 멤버변수들의 초기화 등에 사용됨 
3/21
소스 9-1 (student1.h) 
#ifndef _STUDENT1_H_ 
#define _STUDENT1_H_ 
#include <iostream> 
using namespace std; 
class Student 
{ 
public : 
Student(); //생성자 
void setScore(const int s1, const int s2, const int s3); 
void ShowScore(); 
void SumAverage(); 
private : 
int score[3], sum; 
double average; 
}; 
#else 
#endif 
4/21
소스 9-2 (student1.cpp) -1 
#include "student1.h" 
Student::Student() //생성자 정의 
{ 
score[0]=0; 
score[1]=0; 
score[2]=0; 
sum=0; 
average=0.; 
} 
void Student::setScore(const int s1, const int s2, const int s3) 
{ 
score[0]=s1; 
score[1]=s2; 
score[2]=s3; 
} 
5/21
소스 9-2 (student1.cpp) -2 
void Student::SumAverage() 
{ 
int i; 
for (i=0; i<3; i++) 
sum=sum+score[i]; 
average=sum/3.; 
} 
void Student::ShowScore() 
{ 
int i; 
for (i=0; i<3; i++) 
cout << "점 수 " << i+1 << " : " << score[i] << endl; 
cout << "총 점 : " << sum << endl; 
cout << "평 균 : " << average << endl; 
} 
6/21
소스 9-3 (student1_main.cpp) 
#include "student1.h" 
int main() 
{ 
Student p1; //객체 생성시 생성자 자동 호출 
p1.ShowScore(); 
cout << "***********************" << endl; 
p1.setScore(99,93, 89); 
p1.SumAverage(); 
p1.ShowScore(); 
return 0; 
} 
7/21
생성자 오버로딩 
• 생성자 오버로딩 : 다른 매개변수를 갖는 
여러 개의 생성자 정의가 가능하다. (생성 
자도 함수이므로!!!) 
class Student 
{ 
public : 
Student(); //생성자 – 객체 생성시 매개변수가 없을 때 자동 호출 
Student(const int s1, const int s2, const int s3); //생성자 – 객체 생성시 세 개의 
정수형 매개변수가 있을 때 자동 호출 
void setScore(const int s1, const int s2, const int s3); 
void ShowScore(); 
void SumAverage(); 
private : 
int score[3], sum; 
double average; 
}; 
8/21
소스 9-4, 9-5 
• student1.h에 생성자 선언 추가 
Student(const int s1, const int s2, const int s3); 
• student1.cpp에 추가된 생성자 정의 
Student::Student(const int s1, const int s2, const int s3) 
{ 
score[0]=s1; 
score[1]=s2; 
score[2]=s3; 
sum=0; 
average=0; 
} 
9/21
소스 9-6 
#include "student2.h" 
int main() 
{ 
Student p1; //매개변수 없는 생성자 호출 
p1.setScore(99,93, 89); 
p1.SumAverage(); 
p1.ShowScore(); 
cout << "***************************" << endl; 
Student p2(80, 56, 100); //매개변수 있는 생성자 호출 
p2.SumAverage(); 
p2.ShowScore(); 
return 0; 
} 
10/21
생성자 초기화 목록 
• 생성자 함수 정의에서 헤더 부분에 콜론을 
입력하고 원하는 멤버의 값을 초기화 
Student(const int s1, const int s2, const int s3) // 생 자성정의에서 
: sum(0), average(0) 
{ 
score[0]=s1; 
score[1]=s2; 
score[2]=s3; 
} 
* 생성자 초기화 목록은 클래스 상속에서 상위 클래스의 오버로딩된 
생성자를 선별해서 호출할 때 편리하게 사용됨 
11/21
복사 생성자 
• 객체 생성시 이미 생성된 객체의 멤버 변 
수 값을 복사 
클래스이름 생성할객체(복사할객체); 
• 소스 9-8 (ch09_01.cpp) 
– 클래스 CopyObj를 따르는 객체 p1을 생성 한 
후 객체 p2를 생성할 때 복사 생성자 사용 
12/21
소멸자 
• 소멸자 
– 객체가 소멸할 때 자동으로 실행되는 함수 
– 소멸자 이름은 생성자 이름에 “~” 기호를 앞 
부분에 붙인 형태 
– 소스 9-9 
~Student( ); //소 자멸 
13/21
포인터 객체 
• 포인터 객체 
– 동일 클래스의 객체 주소를 저장함 
– 포인터 객체의 멤버 참조 연산자 : -> 
클래스이름 *포인터객체; 
• 포인터 객체 사용 형식 
포 체객 터인=&객체; //동일한 클래스 객체 주소 저장 
포 체객 터인->멤버; //포 참조멤버이 용객한체 를 인터 
포 체객 터인= new 클 름이 스래; 
14/21
포인터 객체 예 1 
class Student 
{ 
………………….. 
}; 
Student Obj(100, 89, 96); //객 성생 체, 생 출호 자성 
Student *p_Obj; 
p_Obj=&Obj; //포 할주포소객를클 래체 동스객의일 체에인 터 
Obj.Sum( ); 
p_Obj->Sum( ); 
15/21
포인터 객체 예 2 
class Student 
{ 
………………….. 
}; 
Student Obj(100, 89, 96); //객체 생성 
Student *p_Obj=new Student(98, 76, 45); //동 생성객체 생 
………………….. 
delete (p_Obj); //동생 객체 생성으로 확보한 공간 해제 
16/21
참조 객체 
• 참조 객체 
– 객체의 별명 
– 선언과 동시에 초기화해야 함!!! 
클래스이름 &참조객체이름 = 객체이름; 
• 소스 9-10 
17/21
this 
• this 
– 객체 자신을 가리키는 포인터 
– 객체가 생성되면 생성된 객체는 this 포인터를 
가진다. 
– 멤버 함수 내에서 매개변수와 멤버 변수의 이 
름이 동일할 경우 객체의 멤버 변수임을 명시 
하기 위해 사용 
18/21
this 사용 예 
class Sample 
{ 
public : 
void setScore(const int score); //매개변수가 멤버변수와 동일한 이름 
int getScore( ); 
private: 
int score; 
}; 
void Sample::setScore(const int score) 
{ 
Sample::score=score; 
} 
void Sample::setScore(const int score) 
{ 
this->score=score; 
} 
19/21
프렌드 함수 
• 일반 함수와 달리 특정 클래스와 서로 친 
분관계를 허락  private 멤버를 참조할 
수 있음!! 
• 함수 선언시 친분관계를 설정할 클래스 내 
에 c“lafsrs iSealneIndf ”를 명시함 
{ 
friend int CheckTax2(SaleInf &Obj); //프렌드 함수 선언 
public : 
SaleInf(const double Income); 
double getTax(); 
private : 
double Income; 
double Tax; 
}; 
20/21
소스 9-13 (ch09_06.cpp) 
#include <iostream> 
using namespace std; 
class SaleInf 
{ 
friend int CheckTax2(SaleInf &Obj); // 
프렌드 함수 선언 
public : 
SaleInf(const double Income); 
double getTax(); 
private : 
double Income; 
double Tax; 
}; 
SaleInf::SaleInf(const double Income) //생성자 
{ 
this->Income=Income; 
} 
double SaleInf::getTax() //멤버 함수 정의 
{ 
return Tax; 
} 
int CheckTax2(SaleInf &Obj) 
{ 
if (Obj.Income<=0) 
return 0; 
Obj.Tax=Obj.Income*0.03; 
return 1; 
} 
int main() 
{ 
SaleInf s1(20.4); 
CheckTax2(s1); 
cout << "세금 : " << s1.getTax() << endl; 
return 0; 
} 
21/21

More Related Content

What's hot

Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리ssuser7c5a40
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형Hyosang Hong
 
9 object class
9 object class9 object class
9 object class웅식 전
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
Realm.io for iOS
Realm.io for iOSRealm.io for iOS
Realm.io for iOSEunjoo Im
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차HyunJoon Park
 
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
C++ Advanced 강의 2주차
C++ Advanced 강의 2주차C++ Advanced 강의 2주차
C++ Advanced 강의 2주차HyunJoon Park
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장Jinhwa Hong
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamentalJeongHun Byeon
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 

What's hot (20)

Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 generic
 
Object C - RIP
Object C - RIPObject C - RIP
Object C - RIP
 
Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리Refelction의 개념과 RTTR 라이브러리
Refelction의 개념과 RTTR 라이브러리
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
9 object class
9 object class9 object class
9 object class
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Realm.io for iOS
Realm.io for iOSRealm.io for iOS
Realm.io for iOS
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차
 
8 swift 중첩함수
8 swift 중첩함수8 swift 중첩함수
8 swift 중첩함수
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼 #4] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
 
C++ Advanced 강의 2주차
C++ Advanced 강의 2주차C++ Advanced 강의 2주차
C++ Advanced 강의 2주차
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamental
 
Java lambda
Java lambdaJava lambda
Java lambda
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 

Viewers also liked

08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)유석 남
 
Ii.객체지향 1들어가기
Ii.객체지향 1들어가기Ii.객체지향 1들어가기
Ii.객체지향 1들어가기guest77f171ae
 
객체지향의 사실과 오해를 읽고
객체지향의 사실과 오해를 읽고객체지향의 사실과 오해를 읽고
객체지향의 사실과 오해를 읽고Daniel Lim
 
2016년 #implude 안드로이드 단기속성 - 5. 객체
2016년 #implude 안드로이드 단기속성 - 5. 객체2016년 #implude 안드로이드 단기속성 - 5. 객체
2016년 #implude 안드로이드 단기속성 - 5. 객체Sung Woo Park
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향QooJuice
 
실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘sujin oh
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 

Viewers also liked (8)

08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)
 
Ii.객체지향 1들어가기
Ii.객체지향 1들어가기Ii.객체지향 1들어가기
Ii.객체지향 1들어가기
 
객체지향의 사실과 오해를 읽고
객체지향의 사실과 오해를 읽고객체지향의 사실과 오해를 읽고
객체지향의 사실과 오해를 읽고
 
2016년 #implude 안드로이드 단기속성 - 5. 객체
2016년 #implude 안드로이드 단기속성 - 5. 객체2016년 #implude 안드로이드 단기속성 - 5. 객체
2016년 #implude 안드로이드 단기속성 - 5. 객체
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향
 
실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘실생활에서 접하는 빅데이터 알고리즘
실생활에서 접하는 빅데이터 알고리즘
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 

Similar to 09장 객체와 클래스 (고급)

C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차HyunJoon Park
 
Week12 chapter11
Week12 chapter11 Week12 chapter11
Week12 chapter11 웅식 전
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3Daniel Lim
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
JavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsJavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsHyuncheol Jeon
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
13th chapter12 slide
13th chapter12 slide13th chapter12 slide
13th chapter12 slide웅식 전
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스유석 남
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 

Similar to 09장 객체와 클래스 (고급) (20)

C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차
 
6 function
6 function6 function
6 function
 
Week12 chapter11
Week12 chapter11 Week12 chapter11
Week12 chapter11
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
06장 함수
06장 함수06장 함수
06장 함수
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
JavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and ConstructorsJavaScript Patterns - Chapter 3. Literals and Constructors
JavaScript Patterns - Chapter 3. Literals and Constructors
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
13th chapter12 slide
13th chapter12 slide13th chapter12 slide
13th chapter12 slide
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java class
Java classJava class
Java class
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
8.Spring DI_3
8.Spring DI_38.Spring DI_3
8.Spring DI_3
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
Java script
Java scriptJava script
Java script
 

More from 유석 남

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications유석 남
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java유석 남
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩유석 남
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
11장 상속
11장 상속11장 상속
11장 상속유석 남
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스유석 남
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료유석 남
 

More from 유석 남 (11)

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
11장 상속
11장 상속11장 상속
11장 상속
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료
 
Example
ExampleExample
Example
 

09장 객체와 클래스 (고급)

  • 2. 차례 • 생성자와 소멸자 • 포인터 객체와 this 포인터 • 프렌드 함수 2/21
  • 3. 생성자 • 생성자 – 객체가 생성될 때 자동으로 호출되는 멤버 함 수 – 클래스 이름과 같아야 한다. – 함수 반환값은 없다. – public 접근 속성을 취해야 한다. – 변수를 선언하고 초기화하듯이 생성자는 객체 생성 후 멤버변수들의 초기화 등에 사용됨 3/21
  • 4. 소스 9-1 (student1.h) #ifndef _STUDENT1_H_ #define _STUDENT1_H_ #include <iostream> using namespace std; class Student { public : Student(); //생성자 void setScore(const int s1, const int s2, const int s3); void ShowScore(); void SumAverage(); private : int score[3], sum; double average; }; #else #endif 4/21
  • 5. 소스 9-2 (student1.cpp) -1 #include "student1.h" Student::Student() //생성자 정의 { score[0]=0; score[1]=0; score[2]=0; sum=0; average=0.; } void Student::setScore(const int s1, const int s2, const int s3) { score[0]=s1; score[1]=s2; score[2]=s3; } 5/21
  • 6. 소스 9-2 (student1.cpp) -2 void Student::SumAverage() { int i; for (i=0; i<3; i++) sum=sum+score[i]; average=sum/3.; } void Student::ShowScore() { int i; for (i=0; i<3; i++) cout << "점 수 " << i+1 << " : " << score[i] << endl; cout << "총 점 : " << sum << endl; cout << "평 균 : " << average << endl; } 6/21
  • 7. 소스 9-3 (student1_main.cpp) #include "student1.h" int main() { Student p1; //객체 생성시 생성자 자동 호출 p1.ShowScore(); cout << "***********************" << endl; p1.setScore(99,93, 89); p1.SumAverage(); p1.ShowScore(); return 0; } 7/21
  • 8. 생성자 오버로딩 • 생성자 오버로딩 : 다른 매개변수를 갖는 여러 개의 생성자 정의가 가능하다. (생성 자도 함수이므로!!!) class Student { public : Student(); //생성자 – 객체 생성시 매개변수가 없을 때 자동 호출 Student(const int s1, const int s2, const int s3); //생성자 – 객체 생성시 세 개의 정수형 매개변수가 있을 때 자동 호출 void setScore(const int s1, const int s2, const int s3); void ShowScore(); void SumAverage(); private : int score[3], sum; double average; }; 8/21
  • 9. 소스 9-4, 9-5 • student1.h에 생성자 선언 추가 Student(const int s1, const int s2, const int s3); • student1.cpp에 추가된 생성자 정의 Student::Student(const int s1, const int s2, const int s3) { score[0]=s1; score[1]=s2; score[2]=s3; sum=0; average=0; } 9/21
  • 10. 소스 9-6 #include "student2.h" int main() { Student p1; //매개변수 없는 생성자 호출 p1.setScore(99,93, 89); p1.SumAverage(); p1.ShowScore(); cout << "***************************" << endl; Student p2(80, 56, 100); //매개변수 있는 생성자 호출 p2.SumAverage(); p2.ShowScore(); return 0; } 10/21
  • 11. 생성자 초기화 목록 • 생성자 함수 정의에서 헤더 부분에 콜론을 입력하고 원하는 멤버의 값을 초기화 Student(const int s1, const int s2, const int s3) // 생 자성정의에서 : sum(0), average(0) { score[0]=s1; score[1]=s2; score[2]=s3; } * 생성자 초기화 목록은 클래스 상속에서 상위 클래스의 오버로딩된 생성자를 선별해서 호출할 때 편리하게 사용됨 11/21
  • 12. 복사 생성자 • 객체 생성시 이미 생성된 객체의 멤버 변 수 값을 복사 클래스이름 생성할객체(복사할객체); • 소스 9-8 (ch09_01.cpp) – 클래스 CopyObj를 따르는 객체 p1을 생성 한 후 객체 p2를 생성할 때 복사 생성자 사용 12/21
  • 13. 소멸자 • 소멸자 – 객체가 소멸할 때 자동으로 실행되는 함수 – 소멸자 이름은 생성자 이름에 “~” 기호를 앞 부분에 붙인 형태 – 소스 9-9 ~Student( ); //소 자멸 13/21
  • 14. 포인터 객체 • 포인터 객체 – 동일 클래스의 객체 주소를 저장함 – 포인터 객체의 멤버 참조 연산자 : -> 클래스이름 *포인터객체; • 포인터 객체 사용 형식 포 체객 터인=&객체; //동일한 클래스 객체 주소 저장 포 체객 터인->멤버; //포 참조멤버이 용객한체 를 인터 포 체객 터인= new 클 름이 스래; 14/21
  • 15. 포인터 객체 예 1 class Student { ………………….. }; Student Obj(100, 89, 96); //객 성생 체, 생 출호 자성 Student *p_Obj; p_Obj=&Obj; //포 할주포소객를클 래체 동스객의일 체에인 터 Obj.Sum( ); p_Obj->Sum( ); 15/21
  • 16. 포인터 객체 예 2 class Student { ………………….. }; Student Obj(100, 89, 96); //객체 생성 Student *p_Obj=new Student(98, 76, 45); //동 생성객체 생 ………………….. delete (p_Obj); //동생 객체 생성으로 확보한 공간 해제 16/21
  • 17. 참조 객체 • 참조 객체 – 객체의 별명 – 선언과 동시에 초기화해야 함!!! 클래스이름 &참조객체이름 = 객체이름; • 소스 9-10 17/21
  • 18. this • this – 객체 자신을 가리키는 포인터 – 객체가 생성되면 생성된 객체는 this 포인터를 가진다. – 멤버 함수 내에서 매개변수와 멤버 변수의 이 름이 동일할 경우 객체의 멤버 변수임을 명시 하기 위해 사용 18/21
  • 19. this 사용 예 class Sample { public : void setScore(const int score); //매개변수가 멤버변수와 동일한 이름 int getScore( ); private: int score; }; void Sample::setScore(const int score) { Sample::score=score; } void Sample::setScore(const int score) { this->score=score; } 19/21
  • 20. 프렌드 함수 • 일반 함수와 달리 특정 클래스와 서로 친 분관계를 허락  private 멤버를 참조할 수 있음!! • 함수 선언시 친분관계를 설정할 클래스 내 에 c“lafsrs iSealneIndf ”를 명시함 { friend int CheckTax2(SaleInf &Obj); //프렌드 함수 선언 public : SaleInf(const double Income); double getTax(); private : double Income; double Tax; }; 20/21
  • 21. 소스 9-13 (ch09_06.cpp) #include <iostream> using namespace std; class SaleInf { friend int CheckTax2(SaleInf &Obj); // 프렌드 함수 선언 public : SaleInf(const double Income); double getTax(); private : double Income; double Tax; }; SaleInf::SaleInf(const double Income) //생성자 { this->Income=Income; } double SaleInf::getTax() //멤버 함수 정의 { return Tax; } int CheckTax2(SaleInf &Obj) { if (Obj.Income<=0) return 0; Obj.Tax=Obj.Income*0.03; return 1; } int main() { SaleInf s1(20.4); CheckTax2(s1); cout << "세금 : " << s1.getTax() << endl; return 0; } 21/21