4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/cpp04_class and...
TRANSCRIPT
C++ 프 그래 문
4 클래스 객체
클래스 객체
public과 private
조체 클래스
객체 생 과 생
객체 과
생 호출 순
폴트 생 폴트
초 화
함수 정
함수 라 함수
4 클래스 객체 1
1. 클래스 객체
추 형 : (attribute) + 드 (method)
n : 동차 과 드
n 조체, 공 체, typedef 역시 추 형에 포함
à 정 형(user-defined type)
C++ : 주 class 현
4 클래스 객체 2
1. 클래스 객체
타 à 수, 클래스à 객체
n 객체 : 본적 는 수 생 과 동
ØCar MyCar, YourCar;
ØMyCar. = Red;
: Car 클래스 현
n : 수
n 드 : 함수
class Car {int m_color; // 색상int m_CC; // 배 량int m_speed; // 도
void Accelerate() { m_speed++; }// 가void Stop() { } // 춤void TurnOn() { } // 시동켜
};
int main(void){
Car MyCar1, MyCar2; // 객체 생MyCar1.m_speed = 0;MyCar2.m_CC = 1000;MyCar1.Accelerate(); // 버 함수 호출
return 0;}
4 클래스 객체 3
1. 클래스 객체
Car 클래스 제에 객체들 조 (개념적 현)
n 각 객체 수 함수 생
n MyCar1.Accelerate() à MyCar1 수 m_speed 값 가
실제 는 객체 수가 생 만 함
수는 단 하나만 생 à 5.3절
class Car {int m_color; // 색상int m_CC; // 배 량int m_speed; // 도
void Accelerate() { m_speed++; } // 가void Stop() { } // 춤void TurnOn() { } // 시동켜
};
int main(void){
Car MyCar1, MyCar2; // 객체 생MyCar1.m_speed = 0;MyCar2.m_CC = 1000;MyCar1.Accelerate(); // 버 함수 호출
return 0;}
4 클래스 객체 4
2. public과 private
Car 클래스 제 컴파 à 에러 생
정보 닉 : 클래스 내 에 한 접근 제
n public : 접근 가능
n private : 접근
à 보호
: Car 클래스
class Car {private :
int m_color; // 색상int m_CC; // 배 량int m_speed; // 도
public :void Accelerate() { m_speed++; }// 가void Stop() { } // 춤void TurnOn() { } // 시동켜
};
int main(void){
Car MyCar1, MyCar2;//MyCar1.m_speed = 0;//MyCar2.m_CC = 1000;MyCar1.Accelerate();
return 0;}
private 역
public 역
private 에 한
접근 가
private 에 한
내 접근 허
private, public 여러 나 수
private 후 : private 역
public 후 : public 역
주 수는 private ,
함수는 public .
드시 그럴 필 는 .
클래스 시 에 private, public
시
à 폴트 private 식
4 클래스 객체 5
3. 조체 클래스
: 평 한 점 나타내는 Point 조체 만들
C++ 조체는 클래스 99.8% 동
n 수 함수 포함 가능
n private, public 역 정 가능
struct Point { // 평 상의 좌표(x, y)를 나타내는 구조체int x;int y;
};
int main(void){
Point P1;P1.x = 3;P1.y = 4;
cout << P1.x << " " << P1.y << endl;
return 0;}
조체는 폴트 접근 허 (public)
4 클래스 객체 6
3. 조체 클래스
: 조체 클래스처럼 하
struct Point {private :
int x;int y;
public :void SetXY(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
Point P1;P1.SetXY(3, 4);P1.Print();
return 0;}
조체 클래스 차 점 2가
1. private, public 정 하 경
- 클래스 : 폴트 private
- 조체 : 폴트 public
2. : 8
조체 클래스 것 쓸 것 가?
à개 적 취향에 라 택
- public 수만 포함à 조체
- 함수 포함 또는 private 포함à클래스
4 클래스 객체 7
4. 객체 생 과 생
수 초 화 : 다 2가 차 점 ?
n int a; a = 100;
n int a = 100;
조체 수 초 화
쓰 값 초 화한 후 문에 해 100 경
생 과 동시에 100 초 화
struct Point {int x;int y;
};
int main(void){
Point P1 = { 3, 4 }; // 구조체 변수의 초 화
return 0;}
4 클래스 객체 8
4. 객체 생 과 생
클래스 객체 초 화 : 다 프 그램 문제점 ?
class CPoint {private :
int x;
public :int y;
};
int main(void){
CPoint P1 = { 3, 4 }; // X, 버 변수 x가 private이므로 직접 접근 불가능
return 0;}
클래스 객체 생 과 동시에 수 값
초 화하는 à생
4 클래스 객체 9
4. 객체 생 과 생
생
n 종 함수. 객체가 생 드시 생 가 호출
n 생 에 한 제 항
Ø 생 클래스 과 같다.
Ø 환형 것 환하 는다.
Ø 매개 수는 함수 찬가 게 수 다.
Ø 생 해 다 한 생 만들 수 다.
Ø 폴트 매개 수 할 수 다.
생
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
4 클래스 객체 10
4. 객체 생 과 생
생 호출
n 객체 생 시 매개 수 전달
int main(void)
{
CPoint P1 = CPoint(3, 4);
CPoint P2(5, 6);
P1.Print();
P2.Print();
return 0;
}
다 객체 생
첫 째는 님!
주 째 스타 .
4 클래스 객체 11
4. 객체 생 과 생
생 : 여러 개 생 가능
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) { x = a; y = b; } // 생 자1, 2개의 매개변수CPoint(int a) { x = a; y = 0; } // 생 자2, 1개의 매개변수void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
CPoint P1(3, 4); // 생 자1 사CPoint P2(5); // 생 자2 사CPoint P3 = 6; // 6 => CPoint(6)변환, 변환 시 생 자2 사
P1.Print();P2.Print();P3.Print();
return 0;}
생 매개 수가하나 경
같 가능à묵시적 형 환 해 수행
4 클래스 객체 12
4. 객체 생 과 생
폴트 매개 수 가능
class CPoint {private :
int x;int y;
public :CPoint(int a, int b = 0) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
CPoint P1(3, 4);CPoint P2(5);CPoint P3 = 6;
P1.Print();P2.Print();P3.Print();
return 0;}
4 클래스 객체 13
5. 객체 과
객체 생 à 생 호출, 객체 à 호출
객체가 는 시점 (= 수 시점)
① 역 수 : 해당 함수 수행 료 고 환
② 전역 수 : 프 그램 종료
에 한 제 항
① 클래스 과 동 하다. 단, 생 해
에 ‘~’ 문 가 는다.
② 환형 환값 다.
③ 매개 수가 존 하 는다. 라 단 하나 만 존 할 수 다.
class CPoint {private :
int x, int y;
public :CPoint(int a, int b) { x = a; y = b; } // 생 자~CPoint() { cout << " 자" << endl; } // 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
4 클래스 객체 14
5. 객체 과
가 필 한 : 동적 생 하여 하는 경
class CArray {private :
int count;int *x;
public :CArray(int a) { count = a; x = new int[count]; } // 생 자void Delete() { delete [] x; } // 리 해제void Print() {
for (int i = 0; i < count; i++)cout << x[i] << endl;
}};
int main(void){
CArray ary(5);ary.Print();ary.Delete();
return 0;}
객체 생 시 new 해 열 생 하 므
가에 delete [] 수행해 함.
~CArray() { delete [] x; } // 자, 리 해제
다 과 같 추가한다
Delete 함수 Delete 함수 호출 필
4 클래스 객체 15
6. 생 호출 순
생 : 객체 생 순, : 객체 생 역순
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) { x = a; y = b; cout << "생 자 : ";
Print();}~CPoint() { cout << " 자 : ";
Print(); } void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
CPoint P1(1, 1); // 전역 객체CPoint P2(2, 2); // 전역 객체
int main(void){
CPoint P3(3, 3); // 지역 객체CPoint P4(4, 4); // 지역 객체
return 0;}
함수 내에
수뿐만 니라 다 함수 호출 가능!
4 클래스 객체 16
7. 폴트 생 폴트
다 프 그램 수행시 보라.
class CPoint {private :
int x, y;
public :void SetXY(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
CPoint P1;P1.SetXY(3, 4);P1.Print();
return 0;}
객체 생 à생 호출à생 는 에?
객체 à 호출à 는 에?
4 클래스 객체 17
7. 폴트 생 폴트
폴트 생 폴트
n 생 만들 경 폴트 생 가 동 함
Ø CPoint() { } // 매개 수 . 특 히 하는
n 만들 경 폴트 가 동 함
Ø ~CPoint() { } // 특 히 하는
n 생 1개 시적 추가하 폴트 생 는 라짐
n 시적 추가하 폴트 는 라짐
다 프 그램 문제점 ?
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
CPoint P1(3, 4);CPoint P2;
P1.Print();P2.Print();
return 0;}
생 는 에?
4 클래스 객체 18
7. 폴트 생 폴트
다 드 미는?
n CPoint P1(); // CPoint 객체 P1 생 ? No!
Ø 것 매개 수가 고 CPoint 객체 환하는 P1 함수 프 타
미함
ØCPoint P1(void);
Ø비 : int func(void);
n 객체 생 시 매개 수가 경 에는 항 다 과 같
ØCPoint P1;
4 클래스 객체 19
8. 초 화
객체 생 시 수 초 화
n 생 내에 문 ( 존 )
n 초 화 문 : 수 생 과 동시에 초 화!
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) : x(a), y(b) { } // 버 초 화 구문// CPoint(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int main(void){
CPoint P1(3, 4);P1.Print();
return 0;}
(비 )
int a; a = 5;
int a = 5;
생 시 초 화 할 것 가?
생 내에 문 할 것 가?
à차 점만 고 다 느 것 해 무
à단, 드시 초 화 해 하는
황 à 8.4절, 9.8절
수 초 화 순 는
순
생 에 술 순
4 클래스 객체 20
9. 함수 정
함수 정
n 내 정 : 클래스 내 에 함수 체
n 정 : 클래스 내 에 함수 프 타 만 , 함수 체는 클
래스 에
class CPoint {private :
int x, y;
public :CPoint(int a, int b);void Move(int a, int b);void Print();
};
CPoint::CPoint(int a, int b) : x(a), y(b) // 생 자의 부 정의{ }
void CPoint::Move(int a, int b) // 버 함수의 부 정의{
x = x + a;y = y + b;
}
void CPoint::Print() // 버 함수의 부 정의{
cout << "(" << x << ", " << y << ")" << endl;}
int main(void){
CPoint P1(3, 4);P1.Move(5, 6);P1.Print();
return 0;}
환형 클래스 ::함수 (…)
{
}
4 클래스 객체 21
10. 함수 라 함수
함수 내 정 현하는 경
n 동 라 함수 식 à 동 라
정 시 라 함수 하는
n 정 시 inline 키워드만 추가하
class CPoint {private :
int x;int y;
public :CPoint(int a, int b) : x(a), y(b) { }inline void Print();
};
inline void CPoint::Print() // 인라인 함수 언{
cout << "(" << x << ", " << y << ")" << endl;}