2016-07-12 49 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,字符* className)已過時,無效setClass(INT IDX,焦炭的className) - 獲取和設置一個類名。整數參數idx給出類名稱數組中的索引。

我曾嘗試本作的getClass部分:

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


    } 

,我知道那是不正確的,我覺得像撕裂了我的頭髮。我是否必須在別處聲明它,然後使用getClass函數來抓取它?這些課程是魅力介紹,魔藥介紹和變形介紹。 我能夠做setClass沒問題。

這三個問題我根本不理解,我不知道如何在不破壞程序的情況下接近它們。 2. void setGrade(int idx,int grade) - 設置一個等級。該函數應在給定索引處的數組m_iGrades中設置數字等級。

  • 空隙getGrade(INT IDX,整數& iGrade,炭& cGrade) - 獲取一個檔次。這個getGrade函數應該是一個引用函數,並且應該使用基於當前Hogwarts分級系統的字母等級的cGrade引用參數來返回(95-100 =未完成(O),90-94 =超出期望(E),80-89 =可接受(A),70-79 =差(P),60-69 =可怕(D),< 60 =巨魔(T))。它還應該使用iGrade參考參數返回數字等級。

  • void getGrade(int idx,int * iGrade,char * cGrade) - 獲得一個等級。這個getGrade函數應該是一個指針函數,並且應該基於當前Hogwarts評分系統使用cGrade指針參數返回一個字母等級(95-100 =未完成(O),90-94 =超出期望(E),80-89 =可接受(A),70-79 =差(P),60-69 =可怕(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

    *「這被認爲是」更好「,而不僅僅是讓你的成員變量公開。」*僅當保護類不變時。簡單的getter和setter只會返回並設置成員,就像在這個答案中一樣,只是設計失敗。 ESP。後者。 –