반응형
대략적인 클래스
#include <iostream>
#include <windows.h>
#include <stdlib.h>
// 네임스페이스
using namespace std;
// 글자 색상, 배경 색상 변경
void tbColor(unsigned short textColor = 7, unsigned short backColor = 0) {
int color = textColor + backColor * 16;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
// ======================================================================================= //
// 클래스 생성
class Person {
// 접근제어자는 3개
// private : 기본 상태이며 해당 클래스 내부에서만 접근할 수 있다.
// public : 클래스 외부에서도 접근할 수 있다.
// protected : 상속관계에 해당하는 클래스만 접근할 수 있다.
private:
int age;
char name[20];
public:
// 생성자 -> 구조체가 만들어질 때 반드시 실행을 시켜줌 (초기화 함수)
// 생성자는 만드는 규칙이 있다.
// 1. class 명과 동일해야 한다.
// 2. return 타입이 없다.
Person(int age, const char* name) {
cout << ">> 생성자 호출" << endl;
this->age = age;
strcpy(this->name, name);
}
~Person() {
cout << ">> 소멸자 호출" << endl;
}
void introduce() {
tbColor(14, 0); cout << "이름 : "; tbColor(11, 0); cout << name << endl;
tbColor(14, 0); cout << "나이 : "; tbColor(11, 0); cout << age << endl;
tbColor();
}
};
int main(void) {
// 객체 생성
// 객체 초기화는 균일 초기화 { } 권장
Person* p1 = new Person{ 15, "마맘" };
// 클래스 호출
p1->introduce();
// 클래스 삭제
delete p1;
cout << endl << " ========================================== " << endl << endl;
// 복사 초기
Person c1 = Person(10, "야미몽");
// 객체는 직접 초기화를 해야 함.
Person c2(20, "에어로뮤직");
// 함수 선언과 햇갈릴 수 있으므로 균일 초기화를 권장
Person c3{ 40, "로나로나땅땅" };
return 0;
}
클래스를 이용한 예제
#include <iostream>
#include <windows.h>
#include <stdlib.h>
// 네임스페이스
using namespace std;
// 글자 색상, 배경 색상 변경
void tbColor(unsigned short textColor = 7, unsigned short backColor = 0) {
int color = textColor + backColor * 16;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
// ======================================================================================= //
class Test {
private:
int divisor = 2;
public:
Test() {
cout << "생성자 호출" << endl;
}
~Test() {
cout << "소멸자 호출" << endl;
}
void divide(int num) {
tbColor(14, 0); cout << num / this->divisor << endl; tbColor();
}
// divisor의 값을 다이렉트로 바꾸면 오데이터를 걸러낼 수가 없다.
// 때문에 class의 중요한 데이터들은 private으로 막아놓고 검증 코드가
// 작성된 안전한 함수를 이용해 값을 바꿔주도록 한다. ==> 캡슐
void setDivisor(int num) {
if (num == 0) {
cout << "오류 발생 :: 0은 넣을 수 없습니다." << endl;
return;
}
this->divisor = num;
}
};
int main(void) {
Test t1;
t1.setDivisor(0);
t1.divide(10);
t1.divide(100);
t1.divide(1000);
t1.divide(10000);
return 0;
}
반응형