2016-08-03 13 views
2

クラス、配列、関数を使用して2人の学生(Name、id#、クラスが登録されている)に関する情報を表示するプログラムを作成しようとしています。私が苦労しているのは、配列を関数に渡すことです。それ、どうやったら出来るの?クラスの学生のプライベート変数で文字列を関数に渡す

#include <string> 
#include <iostream> 
#include <iomanip> 
using namespace std; 

class Student // Student class declaration. 
{ 
private: 
    string name; 
    int id; 
    string classes; 
    int arraySize; 

public: 
    void setName(string n) 
    { 
    name = n; 
    } 
    void setId(int i) 
    { 
    id = i; 
    } 
    void setClasses(string c, int num) 
    { 
    classes = c; 
    arraySize = num; 
    } 
    string getName() 
    { 
    return name; 
    } 
    int getId() 
    { 
    return id; 
    } 
    void getClasses() 
    { 
    for (int counter=0; counter <arraySize; counter++) { 

     cout << classes[counter] << endl; 
    } 

    } 

}; 

int main() 
{ 
    //Student 1 
    string s1Name = "John Doe"; 
    int s1Id = 51090210; 
    int const NUMCLASSES1 = 3; 
    string s1Classes[NUMCLASSES1] = {"C++","Intro to Theatre","Stagecraft"}; 
    //Student 2 
    string s2Name = "Rick Harambe Sanchez"; 
    int s2Id = 666123420; 
    int const NUMCLASSES2 = 2; 
    string s2Classes[NUMCLASSES2] = {"Intro to Rocket Science","Intermediate Acting"}; 
    // 

    Student info; 

    info.setName(s1Name); 
    info.setId(s1Id); 
    //info.setClasses(s1Classes, NUMCLASSES1); 
    cout << "Here is Student #1's information:\n"; 
    cout << "Name: " << info.getName() << endl; 
    cout << "ID: " << info.getId() << endl; 
    //cout << "Classes: " << info.getClasses() << endl; 


    info.setName(s2Name); 
    info.setId(s2Id); 
    // info.setClasses(s2Classes, NUMCLASSES1); 
    cout << "\n\nHere is student #2's information:\n"; 
    cout << "Name: " << info.getName() << endl; 
    cout << "ID: " << info.getId() << endl; 
    //cout << "Classes: " << info.getClasses() << endl; 



    return 0; 
} 
+2

初心者では、生の配列に 'std:.vector'を優先してください。 'std :: vector'を渡すことは' int'や 'std :: string'を渡すことと同じです。 –

+0

このコードでは、配列を関数に渡そうとしていますか?ポインタを渡すことはできますが、長さも渡す必要があります。代わりに 'std :: array'を使うこともできますし、' vector'を使うこともできます。 –

答えて

0

、あなたは文字列保存されています。あなたのような文字列の配列を格納する必要があるよう String classes; :セットクラスの機能で、その後 String classes[MAX_NUM_CLASSES];

、パスを最初の引数として文字列の配列で、それは次のようになります。これは正しい方向にあなたを指している必要があり

void setClasses(string[] c, int num) 

{ 

classes = c; //not sure if simply setting them equal will work, rather copy entire array using a for loop 

arraySize = num; 

} 

また、string[]の代わりにstd::vectorを使用すると、より簡単になります。

0

あなたはこの

よう function
void foo(data_type arr[]); 

foo(arr); // If you just want to use the value of array 
foo(&arr); // If you want to alter the value of array. 
0

any_data_typeの配列を渡すことができますC++で可変長リスト周囲を通過する通常の方法は、std::vectorを使用することです。 vectorは、関数に簡単に渡すことができ、その内容をコピー(または参照)できる単一のオブジェクトです。 Javaに精通している場合は、基本的にはArrayListです。ここに例があります:

標準ライブラリを使用したくない場合は、配列Cスタイルを渡すことができます。これには、配列の最初の要素へのポインタと配列の長さが渡されます。例:

このような生の配列を渡すと、特に配列をオブジェクトにコピーしたい場合は、苦痛を伴うことがあります。 生の配列 in C & C++は、リストの最初の要素へのポインタに過ぎません。 JavaやJavaScriptなどの言語とは異なり、長さを追跡していないため、配列を別の配列に割り当てることはできません。 std::vectorは「物のリスト」という概念をカプセル化し、一般にその目的のために使用する方が直感的です。

ライフレッスン:std :: vectorを使用します。

編集:オブジェクトをよりきれいに初期化するためにコンストラクタを使用する例については、@ nathanesauの答えを参照してください。 (ただし、コピー・ペーストはしないでください!自分で書いてください!)

0

std::vectorを使用してください。また、必要のない機能は追加しないでください。ここでは、使用例を示します。std::vector

#include <string> 
#include <iostream> 
#include <vector> 

using std::string; 
using std::vector; 

class Student // Student class declaration. 
{ 
private: 

    vector<string> classes; 
    string name; 
    int id; 

public: 

    Student (const vector<string> &classesUse, string nameUse, int idUse) : 
     classes (classesUse), 
     name (nameUse), 
     id  (idUse) 
    { 
    } 

    void print() 
    { 
     std::cout << "Name: " << name << std::endl; 
     std::cout << "Id:  " << id << std::endl; 
     std::cout << "Classes: "; 

     for (int i = 0; i < classes.size(); i++) 
     { 
      if (i < classes.size() - 1) 
      { 
       std::cout << classes[i] << ", "; 
      } 
      else 
      { 
       std::cout << classes[i] << std::endl; 
      } 
     } 

     std::cout << std::endl; 
    } 
}; 

int main() 
{ 
    Student John ({"C++","Intro to Theatre","Stagecraft"}, 
        "John", 
        51090210); 

    John.print(); 

    Student Rick ({"Intro to Rocket Science","Intermediate Acting"}, 
        "Rick", 
        666123420); 

    Rick.print(); 

    return 0; 
} 


Name: John 
Id:  51090210 
Classes: C++, Intro to Theatre, Stagecraft 

Name: Rick 
Id:  666123420 
Classes: Intro to Rocket Science, Intermediate Acting 
関連する問題