2015-10-04 155 views
-2

假設我有:任何人都可以幫助我使用C++類嗎?

我的頭文件:

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. 將所有信息存儲到卡中。

我的問題是,對於我的getStudent(),我應該製作五個不同的功能,如getStudentName() { return name; } ... getStudentMajor() { return major; }?或者無論如何我都可以在我的getStudent();中做一次,因爲我不認爲我可以同時返回所有的班級成員。

我應該使用指針函數嗎?我需要使用strcpystrcmp

PS:所有數組必須仍然是動態聲明的並且指針用於數據操作。

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

閱讀文本文件和類ADT時有什麼需要注意的嗎?

+1

讓你的代碼編譯第一​​ –

+0

我建議你使用'的std :: string否則你就需要擔心這些字符串的存在位置。 –

+0

@NeilKirk我不能使用字符串。 – 7llllll

回答

-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); 
} 

這將使得數據的副本,以便您的吸氣劑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; 
} 
+0

在第二個示例中:更改某些局部變量的值並且不返回任何東西似乎不是很有用...... – owacoder

+0

這是什麼意思?抱歉。 – 7llllll

+0

你的memcpy語句將離開復制的字符串而沒有零終止。更好地使用strcpy()。 –

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; 
0

...我應該讓f ive不同的功能...

是的。

有反正我只能做一次,我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; 
} 
相關問題