클래스 배열
#include <iostream> #include <cstring> using namespace std; class Person { private: char* name; int age; public: Person(char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy_s(name, len, myname); age = myage; cout << "생성자 호출" << endl; } Person() { name = NULL; age = 0; cout << "디폴트 생성자호출" << endl; } void SetPersonInfo(char* myname, int myage) { name = myname; age = myage; } void ShowPersonInfo() const { cout << "이름: " << name << endl; cout << "나이: " << age << endl; } ~Person() { delete[] name; cout << "소멸자 호출" << endl; } }; int main(void) { Person test1[3]; char namestr[20]; char* strptr; int age; int len; for (int i = 0; i < 3; i++) { cout << "이름: "; cin >> namestr; cout << "나이: "; cin >> age; len = strlen(namestr) + 1; strptr = new char[len]; strcpy_s(strptr, len, namestr); test1[i].SetPersonInfo(strptr, age); } for (int i = 0; i < 3; i++) { cout << endl; test1[i].ShowPersonInfo(); } return 0; } |
실행 결과 디폴트 생성자호출 디폴트 생성자호출 디폴트 생성자호출 이름: 학생1 나이: 19 이름: 학생2 나이: 20 이름: 학생3 나이: 19 이름: 학생1 나이: 19 이름: 학생2 나이: 20 이름: 학생3 나이: 19 소멸자 호출 소멸자 호출 소멸자 호출 |
#include <iostream> using namespace std; class Student { private: int stdNum; char name[20]; int age; public: Student() { cout << "생성자 호출" << endl; } void SetInfo(int _stdNum, char* _name, int _age) { stdNum = _stdNum; strcpy(name, _name); age = _age; } void GetInfo() { cout << "학번: " << stdNum << endl; cout << "이름: " << name << endl; cout << "나이: " << age << endl; } ~Student() { cout << "소멸자 호출" << endl; } }; int main() { Student student[3]; char name[20]; int age, stdNum; for (int i = 0; i < 3; i++) { cout << "학번 : "; cin >> stdNum; cout << "이름 : "; cin >> name; cout << "나이 : "; cin >> age; student[i].SetInfo(stdNum, name, age); } cout << endl; for (int i = 0; i < 3; i++) student[i].GetInfo(); } |
실행 결과 생성자 호출 생성자 호출 생성자 호출 학번 : 202010001 이름 : 학생1 나이 : 19 학번 : 202010002 이름 : 학생2 나이 : 19 학번 : 202010003 이름 : 학생3 나이 : 20 학번: 202010001 이름: 학생1 나이: 19 학번: 202010002 이름: 학생2 나이: 19 학번: 202010003 이름: 학생3 나이: 20 소멸자 호출 소멸자 호출 소멸자 호출 |
생성자로 인자를 넘겨 멤버 이니셜라이저로 멤버 변수를 초기화하는 프로그램을 작성해 보자.
#include <iostream> using namespace std; class Student { private: int stdNum; char name[20]; int age; public: Student(int _stdNum, const char* _name, int _age) :stdNum(_stdNum), age(_age) { strcpy(name, _name); } void GetInfo() { cout << "학번: " << stdNum << endl; cout << "이름: " << name << endl; cout << "나이: " << age << endl; } }; int main() { Student student[3] = { Student(10001, "홍길동", 18), Student(10002, "일지매", 12), Student(10003, "임꺽정", 25) }; for (int i = 0; i < 3; i++) student[i].GetInfo(); } |
실행 결과
객체 포인터 배열
#include <iostream> #include <cstring> using namespace std; class Person { private: char* name; int age; public: Person(char* myname, int myage) { int len = strlen(myname) + 1; name = new char[len]; strcpy_s(name, len, myname); age = myage; } Person() { name = NULL; age = 0; } void SetPersonInfo(char* myname, int myage) { name = myname; age = myage; } void ShowPersonInfo() const { cout << "이름: " << name << endl; cout << "나이: " << age << endl; } ~Person() { delete[] name; } }; int main(void) { Person* test1[3]; char namestr[20]; char* strptr; int age; int len; for (int i = 0; i < 3; i++) { cout << "이름: "; cin >> namestr; cout << "나이: "; cin >> age; len = strlen(namestr) + 1; strptr = new char[len]; strcpy_s(strptr, len, namestr); test1[i] = new Person(strptr, age); } for (int i = 0; i < 3; i++) { cout << endl; test1[i]->ShowPersonInfo(); } for (int i = 0; i < 3; i++) delete test1[i]; return 0; } |
실행 결과 |
#include <iostream> using namespace std; class Student { private: int stdNum; char name[20]; int age; public: Student(int _stdNum, const char* _name, int _age) :stdNum(_stdNum), age(_age) { strcpy(name, _name); } void GetInfo() { cout << "학번: " << stdNum << endl; cout << "이름: " << name << endl; cout << "나이: " << age << endl; } }; int main() { Student *student[3]; char name[20]; int age, stdNum; for (int i = 0; i < 3; i++) { cout << "학번 : "; cin >> stdNum; cout << "이름 : "; cin >> name; cout << "나이 : "; cin >> age; student[i] = new Student(stdNum, name, age); } cout << endl; for (int i = 0; i < 3; i++) student[i]->GetInfo(); } |
실행 결과