클래스 멤버 / 생성자 / 소멸자


정적인 클래스 선언 예제)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
class Student {
public:
int student_no;
char name[20];
int gender; //0 = 남자. 1 = 여자
void printStudentInfo() {
printf("학생명 : %d\n", student_no);
printf("학생 이름: %s\n", name);
//인라인 조건절 예제코드
printf("성별 : %s\n", gender == 0 ? "남자" : "여자");
}
};
int main() {
Student s;
s.student_no = 1234;
strcpy(s.name, "김말똥");
s.gender = 0;
s.printStudentInfo();
Student s2;
s.student_no = 5678;
strcpy(s.name, "김순이");
s.gender = 1;
s.printStudentInfo();
return 0;
}


5.동적인(포인터타입) 클래스 선언)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
class Student {
public:
int student_no;
char name[20];
int gender; //0 = 남자. 1 = 여자
void printStudentInfo() {
printf("학생명 : %d\n", student_no);
printf("학생 이름: %s\n", name);
//인라인 조건절 예제코드
printf("성별 : %s\n", gender == 0 ? "남자" : "여자");
}
};
int main() {
//정적 클래스 선언
Student s;
s.student_no = 1234;
strcpy(s.name, "김말똥");
s.gender = 0;
s.printStudentInfo();
//포인터
Student* ps = new Student();
ps->student_no = 1234;
strcpy(ps->name, "김순자");
ps->gender = 1;
ps->printStudentInfo();
delete ps;
return 0;
}
6.생성자)

예제코드)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
class Student {
public:
int student_no;
char name[20];
int gender; //0 = 남자. 1 = 여자
//생성자
Student(int pStdNo, const char* n, int g) {
student_no = pStdNo;
strcpy(name, n);
gender = g;
}
void printStudentInfo() {
printf("학생명 : %d\n", student_no);
printf("학생 이름: %s\n", name);
//인라인 조건절 예제코드
printf("성별 : %s\n", gender == 0 ? "남자" : "여자");
}
};
int main() {
//정적 클래스 선언
Student s = Student(1234, "김말똥", 0);
s.printStudentInfo();
//포인터
Student* ps = new Student(3456, "김순이", 1);
ps->printStudentInfo();
delete ps;
return 0;
}
7.this)

this 키워드는 해당 멤버 함수를 호출한 인스턴스 그 자체의 포인터값을 나타냅니다.
//참고 내용 : 생성자의 파라미터 내용과 변수 이름이 같으면 에러가 난다.
그래서 this ->를 활용해 클래스 변수를 의미한다.
class Student {
public:
int student_no;
char name[20];
int gender; //0 = 남자. 1 = 여자
//생성자
Student(int student_no, const char* n, int g) {
this-> student_no = student_no;
strcpy(name, n);
gender = g;
}
8.인스턴스)

9.소멸자)

10.소멸자 호출의 필요성)

11.strlen(...) )

연습문제)

sol)
해더파일)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <cmath>
int number_counter = 1;
class Employee {
public:
int no;
char name[20];
int gender;
char rank[20];
Employee(char* name, int gender, char* rank) {
strcpy(this->name, name);
this->gender = gender;
strcpy(this->rank, rank);
this->no = number_counter;
number_counter++;
}
void printInfo() {
printf("사원 번호: %d /", no);
printf("사원 이름: %s\n", name);
printf("사원 성별 : %s / ", gender == 1 ? "남자" : "여자");
printf("직급 : %s\n", rank);
}
};
int getInt(const char* prompt);
//함수 실행 후 메모리 해제를 꼭 해줘야 한다.
char* getString(const char* prompt);
소스코드 파일)
#include "Header1.h"
int main() {
//1. 사원 보기
//2. 사원 추가
//3. 사원 삭제
//4. 프로그램 종료
Employee* employee[100];
int count = 0;
while (true) {
printf("명령어를 입력하세요\n");
printf("1. 사원 보기\n");
printf("2. 사원 추가\n");
printf("3. 사원 삭제\n");
printf("4. 프로그램 종료\n");
fseek(stdin, 0, SEEK_END);
int input;
scanf("%d", &input);
if (input == 1) {
// 사원 보기
for (int i = 0; i < count; i++) {
employee[i]->printInfo();
}
}
else if (input == 2) {
// 사원 추가
char* name = getString("사원명 입력해주세요. :");
int gender = getInt("성별을 입력해주세요. (1. 남성, 2.여성):");
char* rank = getString("직급을 입력해주세요.");
Employee* e = new Employee(name, gender, rank);
delete[] name;
delete[] rank;
employee[count++] = e;
}
else if (input == 3) {
// 사원 삭제
int number = getInt("사원번호를 입력해주세요.");
int deletedIndex = -1;
for (int i = 0; i < count; i++) {
if (number == employee[i]->no) {
delete employee[i];
int deletedIndex = i;
break;
}
printf("삭제가 완료 됐습니다.");
}
if (deletedIndex >= 0){
for (int i = deletedIndex; i < count; i++) {
employee[i] = employee[i + 1];
}
}
count--;
}
else if (input == 4) {
// 프로그램 종료
printf("프로그램을 종료 합니다.");
break;
}
else {
printf("잘못 입력하셨습니다");
}
}
return 0;
}
int getInt(const char* prompt) {
int input;
printf("%s", prompt);
fseek(stdin, 0, SEEK_END);
scanf("%d", &input);
return input;
}
char* getString(const char* prompt) {
char* input = new char[100];
printf("%s", prompt);
fseek(stdin, 0, SEEK_END);
scanf("%99[^\n]s", input);
return input;
}
과제형 문제)

sol)
// 헤더파일의 부분 수정하면 됨
class Employee {
public:
int no;
//동적 할당을 받기 위해 포인터로 나타낸다.
char* name;
int gender;
//동적 할당을 받기 위해 포인터로 나타낸다.
char* rank;
Employee(char* name, int gender, char* rank) {
//동적 할당 시작
// + 1하는 이유는 null 문자가 들어갈 길이를 정해주는 것.
this->name = new char[strlen(name) + 1];
this->rank = new char[strlen(rank) + 1];
strcpy(this->name, name);
this->gender = gender;
strcpy(this->rank, rank);
this->no = number_counter;
number_counter++;
}
//소멸자 생성
~Employee() {
delete[] name;
delete[] rank;
//소멸자 확인
printf("%d의 사원번홀르 가진 사원이 삭제 되었습니다.", no);
}