2016-07-12 3 views
-7

클래스에서 과제를 수행하고 있지만 get() 함수를 사용하는 데 어려움이 있습니다. 이것은 그가 우리에게 주었던 과제의 일부입니다 : 학생의 데이터에 저장된 값을 저장하거나 값을 반환하도록 설계된 getVariable() 및 setVariable()이 있습니다. 특히 이러한 함수는 다음과 같이 프로토 타입을 작성해야합니다. int getStudentID(), void setStudentID (int iID) - 학생의 ID를 가져오고 설정합니다.포인터와 루프를 사용하는 C++ 프로그램

#pragma once 
#include <iostream> 
#include <string> 
using namespace std; 
class Student 
{ 
private: 

    Student(void); 

    int m_iStudentID; 
    char m_sMagicalName[32]; 
    char m_sWizardFamilyName[32]; 
    char m_sHouse[32]; 
    char* m_sClasses[8]; 
    int m_iGrades[8]; 
    int NUM_CLASSES; 

public: 
    Student(); 
    ~Student(); 

    Student(int iID, char *mName, char *wName, char *hName) 
    { 
     char mName[32] = "Harry"; 
     char wName[32] = "Potter"; 
     iID = m_iStudentID; 
     strcpy(m_sMagicalName, mName); 
     strcpy(m_sWizardFamilyName, wName); 
     strcpy(m_sMagicalName, "Harry"); 
     strcpy(m_sWizardFamilyName, "Potter"); 
     hName = m_sHouse; 
    } 

    int getStudentID() 
    { 
     char iID; 
     //Get the data for the student id 
     getline(cin, iID); 

     return iID; 
    } 
    ~Student(void); 
} 

죄송합니다. getline을 사용하여 시도했지만 얻을 수 있지만 둘 다 작동하지 않습니다. 그것이 오버로드 된 함수라고 말하는 것입니다. 어떻게 작동 시키나요?

편집 : 알았습니다. 이제 어떻게이 부분을 만들 수 있습니까?

  1. * 무효 getClass (INT의 IDX, 숯불 * 클래스 이름), 무효 setClass (INT의 IDX, 문자 클래스 명) - 가져 오기 및 클래스 이름을 설정합니다. 클래스의 클래스 명 배열의 인덱스에 지정된 정수 인수 idx

나는 getClass 부분이 시도했다 :

void getClass(int idx, char *className) 
    { 
     className[0] = "Introduction to Charms"; 


    } 

나는 그 잘못 알고 난 내 머리를 리핑 같은 느낌. 다른 곳에서 선언하고 getClass 함수를 사용하여이를 가져와야합니까? 수업은 Introduction to Charms, Introduction to Potions, Introduction to Transfiguration입니다. setClass를 아무런 문제없이 처리 할 수있었습니다.

이 세 가지 문제는 전혀 이해할 수 없으며 프로그램을 위반하지 않고 접근하는 방법을 알지 못합니다. 2. void setGrade (int idx, int grade) - 등급을 설정합니다. 이 함수는 주어진 인덱스의 배열 m_iGrades에 숫자 등급을 설정해야한다.

  1. 무효 getGrade (INT의 IDX을 & iGrade, 문자 & cGrade를 INT) - 등급을 가져옵니다. 이 getGrade 함수는 참조 함수 여야하며 현재 호그와트 등급 시스템 (95-100 = 미완료 (O), 90-94 = 기대 초과 (E), 80-89 = 초과)에 기반한 문자 등급 인 cGrade 참조 인수를 사용하여 리턴해야합니다. 수용 가능 (A), 70-79 = 불량 (P), 60-69 = Dreadful (D), < 60 = 트롤 (T)). 또한 iGrade 참조 인수를 사용하여 숫자 등급을 반환합니다.

  2. void getGrade (int idx, int * iGrade, char * cGrade) - 성적 가져 오기. 이 getGrade 함수는 포인터 함수 여야하며 현재 Hogwarts 등급 시스템 (95-100 = 미완료 (O), 90-94 = 기대치 초과 (E), 80-89 = 미정)를 기반으로 한 문자 등급의 cGrade 포인터 인수를 사용하여 리턴해야합니다. 수용 가능 (A), 70-79 = 불량 (P), 60-69 = Dreadful (D), < 60 = 트롤 (T)). 또한 iGrade 포인터 인수를 사용하여 숫자 등급을 반환합니다.

+1

수정하여 [* 많은 * 컴파일 오류 (http://pastebin.com/Zfmg0W7q) 다른 어떤 전에. – WhozCraig

+0

그리고 [MCVE]를 게시하십시오! _ "문제가 있음"_은 귀하가 보는 행동에 대한 좋은 설명으로 간주되지 않습니다. –

+0

생성자에서 매개 변수에 값을 할당합니다. 정말로이 일을하고 싶니? 예를 들어, 당신은 생성자에게'iId'의 복사본을 넘겨 주며, 내용은'm_iStudentID'를 매개 변수의 복사본에 할당합니다. –

답변

0

선생님이 원하는 것은 공공 방법을 통해 수업의 개인 회원 변수를 가져 오거나 설정하는 것입니다. 이것은 단순히 멤버 변수를 공개하는 것보다 "나은"것으로 간주됩니다.

당신은 완전히 오해하고 있습니다. getline이나 여기 비슷한 것을 사용할 필요가 없습니다. 개인 변수를 반환하거나 설정하는 클래스의 함수를 구현하면됩니다.이처럼

:

int getStudentID() 
{ 
    return m_iStudentID; 
} 

void setStudentID(int iID) 
{ 
    m_iStudentID = iID; 
} 
+1

* "이것은 멤버 변수를 공개하는 것보다"더 나은 "것으로 간주됩니다."* 클래스 불변성을 보호 할 때만. 이 대답 에서처럼 돌아오고 멤버를 설정하는 일반 게터와 세터는 디자인이 실패하는 것입니다. Esp. 후자의. –