gpt4 book ai didi

c++ - 如何使用带有指针的数组?

转载 作者:行者123 更新时间:2023-12-01 15:10:33 24 4
gpt4 key购买 nike

我是编程新手,尝试创建一个包含一系列记录的数组,然后让程序接受输入并最终打印出列表的内容。

我在addRecord()函数中记录某些变量的值时遇到问题,因为以下代码的输出如下:

constructor called
-1:-1 Eat lunch

-1:-1 Watch TV

destructor called

为什么我完全错过了对 L1.addRecord(5, 30, "Make dinner");的调用,为什么时间没有过去(它们在构造函数中设置为-1)?

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

class Record {
private:
int hour;
int minute;
string todo;

public:
Record()
{
hour = -1;
minute = -1;
todo = "N/A";
}

void setData(int hour, int minute, const char* td);
void setData(Record& e);
void printRecord();
};

class List
{
private:
Record* recordArr;
int maxRecords;
int actualRecordCount;

public:
List(int maxRecords);

List(List& s) {
actualRecordCount = s.actualRecordCount;
maxRecords = s.maxRecords;
recordArr = new Record[maxRecords];
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].setData(s.recordArr[i]);
}

std::cout << "copy constructor called." << std::endl;
}
~List();
bool addRecord(int hour, int minute, const char* todo);
void printList();
};


///////////////////////////

void Record::setData(int hour, int minute, const char* td)
{
hour = hour;
minute = minute;
todo = td;
}

void Record::setData(Record& e)
{
hour = e.hour;
minute = e.minute;
todo = e.todo;
}

void Record::printRecord()
{
std::cout << hour << ":" << minute << " " << todo << std::endl;
}

List::List(int maxRecords)
: maxRecords(maxRecords)
{
actualRecordCount = 0;
recordArr = new Record[maxRecords];
std::cout << "constructor called" << std::endl;
}

List::~List()
{
std::cout << "\ndestructor called";
delete[] recordArr;
}

bool List::addRecord(int hour, int minute, const char* todo)
{
Record newRecord; // create new Record
newRecord.setData(hour, minute, todo); //assign values

if (actualRecordCount >= maxRecords) // array full
{
return false;
}

else
{
recordArr[actualRecordCount] = newRecord; // put new Record into the array of Entry
actualRecordCount++; // increment Entry count
return true;
}

}

void List::printList()
{
for (int i = 0; i < actualRecordCount; i++)
{
recordArr[i].printRecord();
cout << endl;
i++;
}

}

int main() {

List L1(20);
L1.addRecord(2, 30, "Eat lunch");
L1.addRecord(5, 30, "Make dinner");
L1.addRecord(7, 30, "Watch TV");
L1.printList();

}

最佳答案

void Record::setData(int hour, int minute, const char* td)
{
hour = hour;

“hour”是此 setData()方法的参数名称。因此, hour=hour;将此参数设置为其自身。无论如何,这绝对不会完成任何事情。接下来的其他两个作业也一样。

您的明显意图是初始化碰巧具有相同名称成员的类。当不同的事物在C++中具有相同的名称时,会有一组复杂的规则来选择名称代表的“事物”。这些规则在 =运算符的左侧和右侧相同,因此,这两个 hour最终都引用同一对象:此类方法的参数。

您可以简单地将参数重命名为方法:
void Record::setData(int hourArg, int minuteArg, const char* tdArg)
{
hour = hourArg;

等等。或者,如果您希望保持参数名称相同,则使内容更明确:
this->hour=hour;

关于c++ - 如何使用带有指针的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62323753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com