객체 지향 프로그래밍 (OOP)
OOP: Object Oriented Programing
Class: 구조체가 확장 된 것
타입이 다른 변수 뿐만 아니라 함수까지 포함 ㄱㄴ
#include <iostream>
using namespace std;
class Car {
bool poweron;
string colour;
int wheel;
int speed;
bool wiperon;
};
int main() {
return 0;
}
함수 오버로딩(overloading)
중복가능: 다중정의
- 인수의 자료형이나 개수가 다름 동일한 이름의 함수를 여러개 정의하고 사용할수 있음
- 매개변수의 선언 형태를 이용하여 찾는다
- 매개변수의 자료형이나 개수가 달라야함
매개변수와 부분적 디폴트값 설정
- 반드시 오른쪽 매개변수의 디폴트값부터 채우는 형태로 정의해야함
- 함수에 전달되는 인수는 왼쪽에서부터 오른쪽으로 채워짐
요약
클래스
- 객체가 아니라 객체의 설계도이다
- 변수와 형은 같음
- 자체로는 값저장 ㅂㄱㄴ
특징 4가지
1. 캡슐화
- 클래스 안에 속하는 여러 변수나 함수를 하나의 클래스로 묶어줌
2. 은닉화
- 클래스 안에 속하는 변수나 함수는 원하는 부분만 외부에 공개하거나 비공개 할수 있음
(public, private)
3. 상속성
- 클래스간의 부모, 자식관계 형성 ㄱㄴ
- 자식 클래스는 부모 클래스의 멤버 강속가능. 근데 private은 ㅂㄱㄴ
4. 다형성
- 부모자식간에 형변환 성질
class접근 지정자
public
- 모든 맴버 접근, 멤버 변수 사용 ㄱㄴ
private
- 멤버 변수나 함수 외부 사용 ㅂㄱㄴ
- 클래스 맴버 함수 안에서는 사용 ㄱㄴ
protected 생성자 (Constructor)
- private와 같은 속성
- 상속관계일때 상위클래스의 멤버를 하위 클래스에서 private속성으로 사용 ㄱㄴ
Instance(인스턴스)
- 클래스로 실제 객체 만들기
- 메모리에 공간 만들기
- 변수 명 필요함
기본 형식 - 클래스명 변수명; //메모리에 객체가 만들어져 있는 주소가 담겨져있다
예제:
#include <iostream>
using namespace std;
class TV {
public: //어디서든 접근/사용가능한 함수
bool poweron; //bool: 참거짓 나타냄 거짓=0 참=1
int channel;
int volume;
void on() {
poweron = true;
cout << "TV 전원이 켜집니당" << endl;
}
void off() {
poweron = false;
cout << "전원꺼짐" << endl;
}
void setchannel(int ch)
{
if (ch >= 1 && ch <= 900)
{
channel = ch;
cout << "채널이" << ch << "로 바뀌었습니다" << endl;
}
}
void setvolume(int vol)
{
if (vol >= 0 && vol <= 30)
{
volume = vol;
cout << "볼륨이" << vol << "로 바뀌었습니다" << endl;
}
}
};
int main() {
TV samsung;//메모리에 삼성이라는 객체명으로 인스턴스화
samsung.poweron = true;
samsung.channel = 20;
samsung.volume = 5;
cout << "기본 전원 상태는: " << samsung.poweron << endl;
cout << "기본 채녈 번호는: " << samsung.channel << endl;
cout << "기본 볼륨 크기는: " << samsung.volume << endl;
cout << "------------------------" << endl;
}
같은 변수나 함수를 계속 사용할수 있다
TV LG;
LG.poweron = false;
LG.channel = 100;
LG.volume = 30;
cout << "기본 전원 상태는: " << LG.poweron << endl;
cout << "기본 채녈 번호는: " << LG.channel << endl;
cout << "기본 볼륨 크기는: " << LG.volume << endl;
cout << "------------------------" << endl;
이렇게 lg도 추가가능
함수도 끌어다 쓸 수 있다.
#include <iostream>
using namespace std;
class TV {
public: //어디서든 접근/사용가능한 함수
bool poweron; //bool: 참거짓 나타냄 거짓=0 참=1
int channel;
int volume;
void on() {
poweron = true;
cout << "TV 전원이 켜집니당" << endl;
}
void off() {
poweron = false;
cout << "전원꺼짐" << endl;
}
void setchannel(int ch)
{
if (ch >= 1 && ch <= 900)
{
channel = ch;
cout << "채널이" << ch << "로 바뀌었습니다" << endl;
}
}
void setvolume(int vol)
{
if (vol >= 0 && vol <= 30)
{
volume = vol;
cout << "볼륨이" << vol << "로 바뀌었습니다" << endl;
}
}
};
int main() {
TV samsung;//메모리에 삼성이라는 객체명으로 인스턴스화
samsung.poweron = true;
samsung.channel = 20;
samsung.volume = 5;
cout << "기본 전원 상태는: " << samsung.poweron << endl;
cout << "기본 채녈 번호는: " << samsung.channel << endl;
cout << "기본 볼륨 크기는: " << samsung.volume << endl;
cout << "------------------------" << endl;
TV LG;
LG.poweron = false;
LG.channel = 100;
LG.volume = 30;
cout << "기본 전원 상태는: " << LG.poweron << endl;
cout << "기본 채녈 번호는: " << LG.channel << endl;
cout << "기본 볼륨 크기는: " << LG.volume << endl;
cout << "------------------------" << endl;
LG.setchannel(150);
LG.on();
LG.setvolume(20);
}