任何一个人帮助我使用C ++类?

时间:2015-10-04 22:42:16

标签: c++ class

假设我有:

我的标题文件:

class student{

public:
    void setStudent(char *, char *, int, char, char *);
    char getStudent();
    void printStudent();

 private:
    char *name;
    char *major;
    int  id;
    float gpa;
    char *city;
}

我的implementation.cpp:

void Student::setStudent(char *sName, char *sMajor, int sID, float sGPA , char *sCITY){

//set def student. 
    name = sName;
    major = sMajor;
    ID = sID;
    gpa = sGPA;
    city = sCITY;
}


char student::getStudent(){

}



void student::printStudent(){

    cout << "Name: " << sName << endl;
    cout << "Major: " << sMajor << endl;
    cout << "ID: " << sID << endl;
    cout <<  "GPA: " << sGPA << endl;
    // city will be the "labels", no need to print.

}
  1. 我会读一个student.txt
  2. 将所有信息存储到卡片中。
  3. 我的问题是,对于getStudent(),我应该制作五个不同的功能,例如getStudentName() { return name; } ... getStudentMajor() { return major; }吗?或者无论如何我可以在getStudent();中做一次,因为我认为我不能同时归还所有班级成员。

    我应该使用指针功能吗?我需要使用strcpystrcmp

    PS:所有数组仍必须动态声明,指针用于数据操作。

    另外,在我的readFile() { ifstream fin; }中如何使用fin调用类函数? fin >> getStudentName;fin = getStudentName;

    在阅读文本文件和ADT课程时,有什么我需要注意的吗?

3 个答案:

答案 0 :(得分:0)

  

或者无论如何我可以在我的getStudent();

中做一次

不要在你的类中有多个字段,只需创建一个结构:

struct StudentInfo {
    char *name;
    char *major;
    int  id;
    float gpa;
    char *city;
}

你的新班级:

class student{

public:
    void setStudent(char *, char *, int, char, char *);
    char getStudent();
    void printStudent();

 private:
    StudentInfo info;
}

并在getStudent中:

return self.info;

答案 1 :(得分:0)

  

......我应该制作五种不同的功能......

  

无论如何,我可以在getStudent();

中进行一次

你不应该这样做;它会使你的代码更难理解和阅读。

  

我应该使用指针功能吗?我需要使用strcpystrcmp

否和否。如果您必须使用strcpystrcmp,那么您将被一位不了解C和C ++差异的老师教授“C ++”。

  

如何从文件中加载学生?

您为学生类型重载>>运算符。

使用建议更新了代码:

Student.h:

#include <string>

class student{

public:
    void setStudent(const std::string& name, const std::string& major, int id, float gpa, const std::string& city);
    std::string& getName();
    std::string& getMajor();
    float getGPA();
    std::string& getCity();

    void printStudent();

    friend std::istream& operator>>(std::istream& in_stream, Student& student);

 private:
    std::string m_name;
    std::string m_major;
    int  m_id;
    float m_gpa;
    std::string m_city;
}

Student.cpp:

    std::string& getCity();

    void printStudent();



void Student::setStudent(const std::string& name, const std::string& major, int id, float gpa, const std::string& city) {

//set def student. 
    m_name = name;
    m_major = major;
    m_ID = Id;
    m_gpa = gpa;
    m_city = city;
}


std::string& student::getName() {
    return m_name;
}

std::string& student::getMajor() {
    return m_major;
}

int student::getId() {
     return m_id;
}

float student::getGPA() {
     return m_gpa;
}


std::string& student::getCity() {
     return m_city;
}

void student::printStudent() {

    cout << "Name: " << getName() << endl;
    cout << "Major: " << getMajor() << endl;
    cout << "ID: " << getId() << endl;
    cout <<  "GPA: " << getGPA() << endl;
    // city will be the "labels", no need to print.

}

std::istream& operator>>(std::istream& in_stream, Student& student) {
    in_stream >> student.m_name;
    in_stream >> student.m_major;
    in_stream >> student.m_id;
    in_stream >> student.m_gpa;
    in_stream >> student.m_city;
    return in_stream;
}

答案 2 :(得分:-1)

首先修复你的名字和类型,使它们都匹配。

如果你想返回所有你可以通过引用或指针获取它们:

void getStudent(char *name, char *major, int& id, float& gpa, char *city) const{
   id = this->id;
   gpa = this->gpa;
   memcpy(name,this->name,strlen(this->name) + 1);
   memcpy(major,this->major,strlen(this->major) + 1);
   memcpy(city,this->city,strlen(this->city) + 1);
}

这将生成数据的副本,因此您的getter为const。使用它时,必须确保为名称,专业和城市分配足够的内存。 如果你想要一个允许根据某种原因改变数据的getter你需要

void getStudent(char **name, char **major, int* id, float* gpa, char **city) {
   *id = this->id;
   *gpa = this->gpa;
   *name = this->name;
   *major = this->major;
   *city = this->city;
}