【问题标题】:Dynamic array of objects vs Dynamic array of pointers对象的动态数组与指针的动态数组
【发布时间】:2019-11-27 23:00:09
【问题描述】:

我目前正在从事两个相似的 C++ 项目。两者都使用类 personType,它们询问用户要保存在数组中的元素数量,并使用输入的大小创建一个数组。然后,程序将提示用户输入每个元素的个人信息(姓名、地址、生日等)。最后,在得到所有元素的所有数据后,程序会输出每个人的数据。这两个程序的不同之处在于,第一个程序将数据存储到 personType 类的动态数组中,而第二个程序要求一个 personType 类的动态数组,其中充满了指针。我的程序中的动态指针数组只取一个元素,然后退出,即使我输入“2”作为元素的数量。

我尝试过查看其他 S.O.答案(c++ dynamic array of pointersPointer to dynamic array of pointers to objects),但是当我尝试添加 2 个人时,在输入 1 个人的信息后,程序崩溃/退出。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std;
class personType
{
public:
    void setVar(string fn, string ln, string adr, double hgt, string dob, char gndr);
    void getVar(string &fn, string &ln, string &adr, double &hgt, string &dob, char &gndr);
    void printVar(string fn, string ln, string adr, double hgt, string dob, char gndr, int num);
private:
    string fName;
    string lName;
    string address;
    double height;
    string DOB;
    char gender;
};

int main(){
    int num = 0;
    string first;
    string last;
    string addr;
    double hght;
    string birthDate;
    char gnder;
    int index = 1;

    cout << "How Many People to Create? ";
    cin >> num;
    cin.ignore();

    personType** personObject = new personType*[num];
    for(int i = 0; i < num; i++)
    {
        personObject[num] = new personType[];
    }

    for(int i = 0; i < num; i++)
    {
        personObject[i]->getVar(first, last, addr, hght, birthDate,  gnder);
        personObject[i]->setVar(first, last, addr, hght, birthDate, gnder);
        cout << endl;
        cin.clear();
        cin.ignore();
    }
    for(int i = 0; i < num; i++)
    {
        personObject[i]->printVar(first, last, addr, hght,        birthDate, gnder, index);
        index++;
    }

    for( int i = 0; i < num; i++)
    {
        delete personObject[num];
    }
    delete [] personObject;
    return 0;
} 

void personType::setVar(string fn, string ln, string adr, double hgt, string dob, char gndr)
{
    fName = fn;
    lName = ln;
    address = adr;
    height = hgt;
    DOB = dob;
    gender = gndr;
}

void personType::getVar(string &fn, string &ln, string &adr, double &hgt, string &dob, char &gndr)
{
    cout << "Enter a First Name:";
    getline(cin, fn); 
    cin.clear();
    cout << "Enter a Last Name:";
    getline(cin, ln);
    cin.clear();
    cout << "Enter an Address:";
    getline(cin, adr);
    cin.clear();
    cout << "Enter a Height(inches):";
    cin >> hgt;
    cin.clear();
    cin.ignore();
    cout << "Enter a Date of Birth(mm/dd/yyyy):";
    getline(cin, dob);
    cin.clear();
    cout << "Enter a Gender(m/f):";
    cin.get(gndr);
    cin.clear();
}

void personType::printVar(string fn, string ln, string adr, double hgt, string dob, char gndr, int num)
{
    cout << "PERSON " << num << ":" << endl;
    cout << "Name: " << fn << " " << ln << endl << "Address: " << adr << endl;
    cout << "Height(in inche): " << hgt << endl;
    cout << "Date of Birth(mm/dd/yyyy): " << dob << endl;
    cout << "Gender(m/f): " << gndr << endl << endl;
}

创建类对象的动态数组和指向类对象的指针的动态数组的语法是什么?

【问题讨论】:

  • 帮自己一个忙,使用std::vector&lt;personType&gt;
  • @IgorTandetnik 我还没学过,所以不能用。
  • personObject[num] = new personType[]; 应该是 personObject[i] = new personType; 同样,delete personObject[num] 应该是 delete personObject[i]
  • @IgorTandetnik 我犯了一个愚蠢的错误。让我快速测试一下。 :)
  • @IgorTandetnik 我很抱歉。我没看到。我的程序现在完美运行。您能否在下面比较类对象的动态数组和指向对象的指针的动态数组之间的语法时提供答案?我刚刚开始学习指针,将指针与数组结合起来让我头疼。

标签: c++ arrays pointers computer-science


【解决方案1】:

假设你做到了

ClassObject* obj = new ClassObject[some number]

这里;我们在堆空间中创建了一个数组,并使用名为 obj 的 Classobject 指针指向它,这样我们就可以知道数组从哪里开始。

obj[some number]

这样你就可以达到你想要的索引。

在第二部分中,我理解你想要创建一个动态的指针数组,这将通过指针指针来完成

ClassObject** pointer = new ClassObject*[some number]

如果我弄错了你的问题,请纠正我

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多