c++ class 동적할당 배열 생성자
조회수 239회
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 답변
-
위의 코드에 가장 어울리는 생성자 호출방법은 아래와 같습니다.
info[b] = { name, age, univ, major };
info[b] 자체가 하나의 클래스이며, 생성자를 호출 할 때는 기본적으로 class = { 생성자 안의 입력 파라메타들을 차례대로 넣어주면 됩니다. }
해결이 되셨나요? 생성자를 호출하여 클래스를 정의한 이후에 호출할 수 있는 함수는 클래스 내의 일반 함수(메서드) 들만 호출 할 수 있습니다. 해결이 되셨다면 좋아요 한번 눌러주세요~
생성자와 일반 함수(메서드) 의 개념을 복습하시면 더 도움이되겠네요.
질문과는 다른 얘기라 아래쪽에 적겠습니다. 이거 이외에 의문 점이 한 두가지가 아니긴해요. 첫번째는 왜 s_name[10]에 한가지 주소에 해당하는 값만 넣어주는지가 의문이네요. 넴스페이스 std 를 쓰시는거면 string 으로 주고 받아도 될거같은데 .. 두글자만 입력해봐도 이상한 점을 눈치 채실겁니다. ㅎㅎ 그리고 두번째는 countinue 넣어놓으셨는데 이대로 진행하시면 의도는 알겠다만 b++ 에 대한 쪽은 영원히 가실 수 없을 거같아보네요 ㅎㅎㅎㅎ... countinue는 점프입니다. while 문은 반복하되 countinue 아래에 문장은 실행이 안돼요!
댓글 입력