본문 바로가기

프로그램언어/C++

클래스3

클래스 배열

 

#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();
}

실행 결과

 

'프로그램언어 > C++' 카테고리의 다른 글

클래스3 문제  (0) 2020.08.08
클래스 예제1  (0) 2020.08.08
클래스2 문제  (0) 2020.08.07
클래스2  (0) 2020.08.06
클래스1 - 문제  (0) 2020.08.06