2012-08-23 100 views
1

C++新手在這裏,這是我的第一篇文章。我在學校的一個項目上工作,我有點卡住了。我的任務是創建一個課程名冊。每個名冊將包含課程名稱,課程代碼,課程學分和教授姓名。沒問題,我有一個花名冊班。問題是我不確定如何製作一個對象數組動態,因爲它必須能夠在用戶請求時增長和縮小。我對動態數組一般比較熟悉,但不確定動態數組對象的語法。而且,按照教授的指示,載體不是的選項。我搜索了這個論壇以及在互聯網上的其他領域,並沒有找到答案,或者我不理解我找到的答案,並認爲我會在這裏發佈。以下是我的非動態數組對象的代碼。幫助轉換爲動態數組將非常感激。謝謝!C++動態數組對象

StudentEnrollment.h:

#ifndef STUDENTENROLLMENT_H 
#define STUDENTENROLLMENT_H 

# include <iostream> 
# include <string> 

using namespace std; 

class Roster { 

private: 

    string courseName; 
    string courseCode; 
    string courseCredits; 
    string professorName; 

public: 

    void setCourseName (string); 
    void setCourseCode (string); 
    void setCourseCredits (string); 
    void setProfessorName (string); 

    string getCourseName(); 
    string getCourseCode(); 
    string getCourseCredits(); 
    string getProfessorName(); 

    Roster(); 

}; 

#endif; 

StudentEnrollment.cpp:

#include <iostream> 
#include <string> 
#include "StudentEnrollment.h" 

using namespace std; 

// Roster class implementation 

Roster::Roster() { 

    courseName = ""; 
    courseCode = ""; 
    courseCredits = ""; 
    professorName = ""; 


} 


void Roster::setCourseName (string cn) { 
    courseName = cn; 
} 

void Roster::setCourseCode (string c) { 
    courseCode = c; 
} 

void Roster::setCourseCredits (string cc) { 
    courseCredits = cc; 
} 

void Roster::setProfessorName (string pn) { 
    professorName = pn; 
} 

string Roster::getCourseName() { 
    return courseName; 
} 

string Roster::getCourseCode() { 
    return courseCode; 
} 

string Roster::getCourseCredits() { 
    return courseCredits; 
} 

string Roster::getProfessorName() { 
    return professorName; 
} 

main.cpp中:

#include <iostream> 
#include <string> 
#include "StudentEnrollment.h" 

using namespace std; 

int main (int argc, char * const argv[]) { 

    int number_of_rosters = 0; 

    string course, code, credits, name; 

    cout << "Enter the number of rosters you would like to create: "; 
    cin >> number_of_rosters; 
    cin.ignore(100, '\n'); 


    Roster roster[number_of_rosters]; 

    for (int i = 0; i < number_of_rosters; i++){ 
     cout << "Enter course name: "; 
     getline(cin,course); 
     roster[i].setCourseName(course); 

     cout << "Enter course code; "; 
     getline(cin, code); 
     roster[i].setCourseCode(code); 

     cout << "Enter course credits: "; 
     getline(cin, credits); 
     roster[i].setCourseCredits(credits); 

     cout << "Enter professor name: "; 
     getline(cin, name); 
     roster[i].setProfessorName(name); 

     cout << "Next course..." << endl; 
    } 

    cout << endl; 

    for (int i = 0; i < number_of_rosters; i++){ 
     cout << roster[i].getCourseName() << endl; 
     cout << roster[i].getCourseCode() << endl; 
     cout << roster[i].getCourseCredits() << endl; 
     cout << roster[i].getProfessorName() << endl; 
     cout << endl; 
    } 

    return 0; 
} 

原諒我,如果這沒有正確格式化。這是我的第一篇文章。

亞瑟

+0

你給'linklists'有什麼想法嗎? –

回答

0

爲了生長或收縮陣列由用戶的要求,進行所希望的大小的一個新的數組,並且由一個複製了一個元件。這是一個O(n)操作,但除非您明確地在棧上聲明它,或者使用new或帶指針的malloc,否則您無法訪問內存。

無論如何,您只需製作所需的後期增長/縮小後尺寸的第二個數組。我建議使用new/malloc,這樣你可以將你的指針移動到新創建的數組中。另外,我建議在將陣列複製到新陣列後清理陣列中的內存。

也可以考慮不同的數據結構,例如鏈接列表。

+0

謝謝柯比。我熟悉與它相關的過程和語法,例如數據類型int。在我的情況下,這與數據類型名冊相同嗎?換句話說,動態數組對象的語法是什麼?我寧願使用新的/刪除[]操作。 – user1618639

+0

看看這個問題的選定答案:http://stackoverflow.com/questions/255612/dynamically-allocating-an-array-of-objects – Kirby

+0

謝謝,柯比。在我發佈之前,我確實看到了這篇文章,並沒有完全遵循。我會再看一遍(在白天而不是早上3點),看看它是否陷入。 – user1618639

1

我認爲你將不得不實現自己的數據結構,據我所知,C++本質上不支持這個,這就是爲什麼我們使用向量。

對於這種類型的問題,我們必須實現自己的數據結構,我認爲linklist將是一個合適的解決方案。

這可能是vectors是如何在內部實現的,它們是不同的解決方案。

基本上LinkList是由連接節點組成的一個特殊的數據結構,把它想象成一個鏈,每個元素都有一個值,在這種情況下是一個名冊,還有一個鏈接到下一個元素和/或一個鏈接到前一個元素等等......所以如果你想添加一個元素,你可以簡單地將它添加到最後或開始它到你,如果你想刪除一個元素,只需剪切它並連接兩個元素與一系列更像棒子的物體形成鮮明對比,您無法真正將任何東西添加到任何一端,即使可以,也無法真正切割,您可以真正將其連接在一起,無縫連接。

鏈接列表有很多變化,但這是它的要點。

在另一方面,如果你想使用dynamic arrays你將必須手動所有的值複製到新的更大的陣列,並摧毀了以前的一個,這是真的昂貴,可以說是相當危險的根本您需要實現一個我們可以使用memcpy的拷貝構造函數,但是如果我們的對象持有引用或者指向其他對象的指針,那麼這會非常危險,在這種情況下,如果它們被刪除了,我們會指向不好的值。

另請注意,如果您未提供一個,默認構造函數,複製構造函數,賦值運算符,C++編譯器將插入以下內容,所有這些操作符都可能或可能不會按預期方式工作,具體取決於基礎成員,例如總是明智的實現我們自己的,在這種情況下你的確定,即你沒有任何原始指針,但是當運行時錯誤開始出現並且你不知道爲什麼時要記住。

+0

我沒有想過嘗試鏈接列表。我們還沒有在我的C++類中學到,但是我從我的Java類中獲得了一些。我會給你一個鏡頭併發布結果。謝謝! – user1618639

+0

我看,沒問題,這是數據結構,還是編程介紹? –

+0

這是介紹編程,第二學期。 – user1618639