c++ class 동적할당 배열 생성자

조회수 363회

include

using namespace std;

class Student_info

{

private:

char s_name[10];


int s_age = 0;


char s_university[100];
char s_major[100];

public:

Student_info();
Student_info(char* name, int age, char* univ, char* major);
bool find(char* name);
void print();
void change(char* name, int age, char* univ, char* major);

};

Student_info::Student_info() {

for (int i = 0; i < 10; i++) {
    s_name[i] = NULL;
}
for (int i = 0; i < 100; i++) {
    s_university[i] = NULL;
    s_major[i] = NULL;
}

}

//기본 생성자 (class 배열을 초기화)

Student_info::Student_info(char* name, int age, char* univ, char* major) {

s_name[10] = *name;
s_age = age;
s_university[100] = *univ;
s_major[100] = *major;

}

bool Student_info::find(char* name){

if (s_name[10] == *name) {
    return 1;
}
else
    return 0;

}

void Student_info::print() {

cout << "--------------------------" << endl;
cout << "Name: " << s_name[10]<<endl;
cout << "Age : " << s_age<<endl;
cout << "uni : " << s_university[100] << endl;
cout << "major:" << s_major[100] << endl;
cout << "--------------------------" << endl;

}

void Student_info::change(char* name, int age, char* univ, char* major) {

s_name[10] = *name;
s_age = age;
s_university[100] = *univ;
s_major[100] = *major;

}

int main() {

string comd;  //char* 는 읽기만 가능하다!!! 쓰기는 불가능!!!!!!
char name[10]; int age; char univ[100]; char major[100];
int b = 0;
class Student_info* info = new class Student_info[9];
    while (1) {
        cout << "Please Enter Command(insert, find, change, print, exit)";
        cin >> comd;
        if (comd == "insert"){
            cin >> name >> age >> univ >> major;
            info[b].Student_info(name, age, univ, major); // 이 부분 인덱스 별로 생성자 호출 할 방법을 찾자
            continue;
        }
        else if(comd =="find"){
            continue;
        }
        else if(comd =="change"){

            continue;
        }
        else if(comd =="print"){
            info[b].print();
            continue;
        }
        else if(comd =="exit"){
            continue;
        }
        else{
            break;
        }
        b++;
    }
return 0;

}

이 코드에서 main 함수 부분의 if (comd == "insert"){ cin >> name >> age >> univ >> major; info[b].Student_info(name, age, univ, major); // 이 부분 인덱스 별로 생성자 호출 할 방법을 찾자 이 부분에서 info[b].Student_info(~)이부분이 잘못된 것은 아는데 저런식으로 만들어낸 객체 인덱스 별로 생성자를 호출하고싶은데 방법을 잘 못찾겠습니다.. 도움 주실 분 있으신가요 ?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    위의 코드에 가장 어울리는 생성자 호출방법은 아래와 같습니다.

    info[b] = { name, age, univ, major }; 
    

    info[b] 자체가 하나의 클래스이며, 생성자를 호출 할 때는 기본적으로 class = { 생성자 안의 입력 파라메타들을 차례대로 넣어주면 됩니다. }

    해결이 되셨나요? 생성자를 호출하여 클래스를 정의한 이후에 호출할 수 있는 함수는 클래스 내의 일반 함수(메서드) 들만 호출 할 수 있습니다. 해결이 되셨다면 좋아요 한번 눌러주세요~

    생성자와 일반 함수(메서드) 의 개념을 복습하시면 더 도움이되겠네요.


    질문과는 다른 얘기라 아래쪽에 적겠습니다. 이거 이외에 의문 점이 한 두가지가 아니긴해요. 첫번째는 왜 s_name[10]에 한가지 주소에 해당하는 값만 넣어주는지가 의문이네요. 넴스페이스 std 를 쓰시는거면 string 으로 주고 받아도 될거같은데 .. 두글자만 입력해봐도 이상한 점을 눈치 채실겁니다. ㅎㅎ 그리고 두번째는 countinue 넣어놓으셨는데 이대로 진행하시면 의도는 알겠다만 b++ 에 대한 쪽은 영원히 가실 수 없을 거같아보네요 ㅎㅎㅎㅎ... countinue는 점프입니다. while 문은 반복하되 countinue 아래에 문장은 실행이 안돼요!

    • 감사합니다 일정이 있어서 너무 늦게 봤네요 s_name을 char*로 사용한 것은 과제에서 private쪽 변수를 저렇게 정해줘서 그랬습니다 ㅠㅠ 다른 내용은 확인해보겠습니다 ! 답변 감사해요 코린이이 2023.3.2 14:01
    • class를 동적할당 후 호출하는건 처음해봐서 헷갈렸네요 코린이이 2023.3.2 14:01

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)