[ 6주차 - 2 ]
클래스
1. 클래스( class )
- 객체( object )의 형식을 명시하는 새로운 자료형을 정의한다.
- 데이터와 그 데이터 상에 동작할 코드를 포함
- 데이터와 코드를 연결
- 객체를 만드는 방법을 명시하는 계획들의 집합
- 구성요소
ⓐ 멤버 변수 : 클래스 내에 선언된 변수
ⓑ 멤버 함수 : 클래스 내에서 선언된 함수
- 키워드 class를 사용함으로써 생성
2. 객체 : 클래스의 인스턴스( instance )
클래스의 변수를 선언할 때 그 클래스의 객체가 생성된다. 객체는 물리적인 메모리를 가지고 있다.
( 클래스 정의는 메모리 공간을 가지고 있지 않다. )
▶클래스는 자료형이고, 그 클래스의 변수 부분을 클래스의 객체 또는 인스턴스라 부른다.
#include <iostream>
using namespace std;
class queue {
private: // private 멤버
int q[100];
int sloc, rloc;
public: // public 멤버
void init();
void qput(int i);
int qget();
};
int main() {
// queue 형의 두 객체 Q1과 Q2를 생성
queue Q1, Q2;
//Q1의 sloc 값을 출력
cout << Q1.qget();
return 0;
}
private 멤버 : queue 클래스의 다른 멤버들에 의해서만 접근될 수 있다.
→ 프로그램의 다른 부분에 의해서는 접근될 수 없음 ( 캡슐화가 수행되는 한가지 방법 )
public 멤버 : 프로그램의 다른 부분에서도 접근이 가능 ( main함수에서 실행 가능 )
→ 공용 함수를 통해 클래스의 전용 원소들을 접근할 수 있음.
* 클래스는 추상 자료형이다.
* main 함수에서 queue 클래스에 접근할 때는 외부 접근이다.
* 클래스를 선언하는 부분을 head File 이라한다.
클래스 멤버 함수 구현
클래스의 멤버인 함수를 구현할 때, 함수 이름과 클래스의 이름을 함께 써서 컴파일러에게 함수의 소속을 알려줘야한다.
1. 범위 지정 연산자( :: ) : 함수의 소속 클래스를 명시
2. 멤버 함수 호출 시 사용 ( . )
int main() {
// queue 형의 두 객체 Q1과 Q2를 생성
queue Q1, Q2;
// 멤버 함수 호출 시 사용
Q1.init();
}
void queue::qput(int i) {
if (sloc == 99) {
cout << "Queue is full\n";
return;
}
sloc++;
q[sloc] = i;
}
* cpp 프로그램은 멤버 함수의 선언 부분인 head 파일과 cpp 실행 구현 부분을 따로 구분해서 저장한다.
JAVA에서는 멤버 함수를 따로 구분하지 않고 클래스 안에서 같이 작성한다.
메인함수에서 클래스의 객체를 생성하고 그 클래스의 멤버나 함수에 접근하는 것을 외부 접근이라 한다.
private 멤버들은 외부 접근들이 허용되지 않는다.
#include <iostream>
using namespace std;
class queue {
private: // private 멤버
int q[100];
int sloc, rloc;
public: // public 멤버
void init();
void qput(int i);
int qget();
};
void queue::qput(int i) {
if (sloc == 99) {
cout << "Queue is full\n";
return;
}
sloc++;
q[sloc] = i;
}
void queue::init() {
rloc = sloc = -1;
}
int queue::qget() {
if (rloc == sloc) {
cout << "Queue underflow\n";
return 0;
}
rloc++;
return q[rloc];
}
int main() {
// queue 형의 두 객체 a와 b를 생성
queue a, b;
a.init();
b.init();
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
cout << "queue a : ";
cout << a.qget() << " ";
cout << a.qget() << "\n";
cout << "queue b : ";
cout << b.qget() << " ";
cout << b.qget() << "\n";
return 0;
}
클래스 멤버에 대한 접근
#include <iostream>
using namespace std;
class myclass {
private:
int a; // 전용데이터
public:
int b; // 공용 데이터
void setab(int i); // 공용 함수
int geta();
void reset();
};
void myclass::setab(int i) {
a = i; //a를 직접 참조
b = i * i; // b를 직접 참조
}
int myclass::geta() {
return a;
}
void myclass::reset() {
setab(0); // 다른 멤버 함수를 호출하는 것도 가능
}
int main() {
myclass ob;
ob.setab(5);
cout << "ob after setab(5) : "<< ob.geta() << " ";
cout << ob.b << "\n";
ob.b = 20; // b가 공용이므로 b를 접근할 수 있음
cout << "ob after ob.b=20 : " << ob.geta() << " ";
cout << ob.b << "\n";
ob.reset();
cout << "ob after ob.reset() : " << ob.geta() << " ";
cout << ob.b << "\n";
return 0;
}
//▶ ob after setab(5) : 5 25
// ob after ob.b=20 : 5 20
// ob after ob.reset() : 0 0
실습문제
멤버 변수와 멤버함수를 갖는 box 클래스를 작성하기
#include <iostream>
using namespace std;
class box {
private:
double x, y, z; // 가로, 세로, 높이
double volume; // 부피
public:
void setbox(double a, double b, double c); // x=a; y=b; z=c; 실행
void calcvolume(); // 부피 계산
int vol(); // 부피 반환
};
int main() {
box mybox;
double a, b, c;
cin >> a >> b >> c;
mybox.setbox(a, b, c);
mybox.calcvolume();
cout << "부피 : " << mybox.vol();
}
void box::setbox(double a, double b, double c) {
x = a;
y = b;
z = c;
}
void box::calcvolume() {
volume = x * y * z;
}
int box::vol() {
return volume;
}
'2CHAECHAE 학교생활 > 객체지향프로그래밍(C++)' 카테고리의 다른 글
[ 객체지향프로그래밍(C++) 7주차 ② ] (0) | 2022.04.16 |
---|---|
[ 객체지향프로그래밍(C++) 7주차 ① ] (0) | 2022.04.16 |
[ 객체지향프로그래밍(C++) 6주차 ① ] (0) | 2022.04.11 |
[ 객체지향프로그래밍(C++) 5주차 ② ] (0) | 2022.04.01 |
[ 객체지향프로그래밍(C++) 5주차 ① ] (0) | 2022.04.01 |