如何在类中使用数组

时间:2012-12-28 20:30:30

标签: c++ arrays class

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

好的,这就是我现在所做的。但我现在在激活课程时遇到问题?我的意思是说我不能使用这个类或它的方法?我是否也以正确的方式创建了类?

3 个答案:

答案 0 :(得分:2)

只需要一个包含成员firstNamelastName等的课程。称之为Person或其他什么。然后用std::vector<Person>替换你的数组。

创建读取标准输入中特定信息的成员方法(可能是enum,告诉方法要读取哪些信息)。

使用显示每个对象的信息的方法替换最后的cout

答案 1 :(得分: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;
    }
}

在main中:

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

创建一个循环并在该循环中提出问题以填充数据或搜索

答案 2 :(得分:0)

你没有激活一个类,你创建它的实例..

这里我只是指出你的一些语法错误。你还应该按照上面其他答案中的建议来为这个人创建一个更合适的类定义。

在你上课,

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

方法的每个参数都需要有一个类型后跟名称,如

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

在方法内部,格式化块的方式类似于

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

    }
}

这将使阅读更容易..

在switch()语句中,

如果您打算从用户那里获取一些值,请在每个提示之后使用“cin”语句“First Name”,“Last Name”等。

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