1
#include <iostream> 
#include <string>
#include <math.h> 
#include <fstream>
using namespace std;

class Storage
{
public:
Storage();
string information[10][7];
void SetInformation(string,int);
void GetInformation(int);
};  

Storage::Storage(){cout<<"\nStorage Activated\n";}

void Storage::SetInformation(string,int i)
{//input
    i--;
    for (int j=0;j<7;j++)
    {
    switch(j+1)
    {case 1: cout << "\nFirst Name: "; break;
    case 2: cout << "\nLast Name: "; break;
    case 3: cout << "\nAge: "; break;
    case 4: cout << "\nEmail: "; break;
    case 5: cout << "\nDoor Number: "; break;
    case 6: cout << "\nRoad Name: "; break;
    case 7: cout << "\nPost Code: "; break;
    default:;}      
    cin >> information[i][j];}
    }

void Storage::GetInformation(int i){
// output
    i--;
    for (int j=0;j<7;j++)
    {   
    switch(j+1)
    {case 1: cout << "\nFirst Name: "; break;
    case 2: cout << "\nLast Name: "; break;
    case 3: cout << "\nAge: "; break;
    case 4: cout << "\nEmail: "; break;
    case 5: cout << "\nDoor Number: "; break;
    case 6: cout << "\nRoad Name: "; break;
    case 7: cout << "\nPost Code: "; break;
    default:;}      

    cout << information[i][j];}
}

int main()
{
    int x;
    Storage();
    Storage Someone;
    cin >> x;
    Someone.SetInformation(int);

return 0;
}

これは私が今作ったものです。しかし、クラスをアクティブ化する際に問題が発生していますか? つまり、クラスまたはそのメソッドを使用できないということですか? また、正しい方法でクラスを作成しましたか?

4

3 に答える 3

2

メンバーfirstNamelastNameなどを含むクラスを作成するだけです。それを呼び出すPersonか、何でもします。次に、配列をstd::vector<Person>.

標準入力から特定の情報を読み取るメンバー メソッドを作成します (おそらく、enumどの情報を読み取るかをメソッドに指示する です)。

cout末尾の を、オブジェクトごとに情報を表示するメソッドに置き換えます。

于 2012-12-28T20:33:01.277 に答える
0

簡単なクラスと開始するためのいくつかのメソッド:これはC ++よりも「C」スタイルですが、理解するのは非常に簡単です。あなたがそれをアップグレードすることができる(そしてすべきである)より多くのOOPルールを知っているなら

class Person
{
public:
    Person() { /*init with default values here if needed*/ isValid = false; }
    ~Person() { }

    /* add setters/getters if needed */
public:
    string firstName;
    string lastName;
    int age;
    string email;
    int doorNumber;
    string roadName;
    string postCode;
    bool isValid;   // is the data valid
};

「メソッド」:

void inputPersonData(Person &person)
{
    cout << "\nFirst Name: ";
    cin >> person.firstName;

    cout << "\nLast Name: ";
    cin >> person.lastName;

    cout << "\nAge: ";
    cin >> person.age;

    cout << "\nEmail: ";
    cin >> person.email;

    cout << "\nDoor Number: ";
    cin >> person.doorNumber;

    cout << "\nRoad Name: ";
    cin >> person.roadName;

    cout << "\nPost Code: ";
    cin >> person.postCode;

    person.isValid = true; // now the data is valid
}

void outputPersonData(Person &person)
{
    // do not print not loaded person data...
    if (person.isValid == false) return;

    // use cout to print...
}

// us it that way:
// deletePerson(information, 10, index_to_delete)
void deletePerson(Person *peopleArray, int count, int toDelete)
{
    peopleArray[toDelete].isValid = false;
}

名前による単純な検索関数は、インデックスを返します。

int searchPersonByName(Person *peopleArray, int count, const string &name)
{
    for (int i = 0; i < count; ++i)
    {
        if (peopleArray[i].firstName == name)
            return i;
    }
}

主に:

Person information[10];

// input
cout << "\nWhich Slot would you like to store the informaton in ?(1-10)";
cin >> i;
i--;
inputPersonData(information[i]);
outputPersonData(information[i]);

ループを作成し、そのループでデータを入力するか検索するための質問をします

于 2012-12-28T21:22:35.250 に答える
0

クラスをアクティブにするのではなく、そのインスタンスを作成します..

ここで、構文エラーの一部を指摘しています。さらに、上記の他の回答の提案に従って、その人により適切なクラス定義を作成する必要があります。

あなたのクラスでは、

void Storage::SetInformation(string,int i) <--- Wrong.

メソッドの各パラメーターには、型の後に名前が続く必要があります。

void Storage::SetInformation(string name, int i)

メソッド内で、ブロックをフォーマットする方法は次のようになります。

for ( ... ) {
    switch ( ... ) {

    }
}

これにより、読みやすくなります。

switch() ステートメント内で、

ユーザーから何らかの値を取得することを意図している場合は、「First Name」、「Last Name」などの各プロンプトの後に「cin」ステートメントを使用します。

default:;}  <--- Error

に変更します

    default: break;
} 

あなたのメインでは、

Storage();  <--- Delete this line
Storage Someone; <--- This is creating an instance of your class.

クラスのインスタンスでメソッドを呼び出しますが、

Someone.SetInformation(int); <--- This is incorrect.

タイプではなく、値をメソッドに渡す必要があります。「int」は型指定子です。メソッドを次のように呼び出します。

Someone.SetInformation("some text", x);
于 2012-12-29T00:11:49.957 に答える