2016-07-12 47 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。后者。 –