gpt4 book ai didi

C++ 重载指针 ostream

转载 作者:行者123 更新时间:2023-11-30 04:24:57 26 4
gpt4 key购买 nike

我正在学习 C++,并且有一个类(class)项目将在 5 天内完成。我花了 4 个小时研究如何做到这一点,但我还没有想出答案。救救我吧!

问题。我有一个指向包含动态数组的类的指针。我需要获取该数组并将其保存到文件中以便稍后检索。这是我的 2 个标题和实现。我还没有编写“保存到文件”的代码,因为一旦我解决了这个问题,这将很容易。我的问题是它一直打印指针的地址而不是其中的数据。

vehReg.h

class vehReg {
public:
/* STUFF */
};
}
#endif

vehData.h

#include "vehReg.h"

using namespace std;

class vehData {
public:
//CONSTRUCTORS
vehData();

//DECONSTRUCTOR
~vehData();

//METHODS
friend ostream &operator<<( ostream &output, const vehData &v);

private:
typedef unsigned long longType;
typedef std::size_t sizeType;
sizeType used,capacity;
vehReg *data;
};
}
#endif

vehData.cpp

    //CONSTRUCTOR
vehData::vehData(){
capacity = 5;
used = 0;
data = new vehReg[capacity];
}

//DECONSTRUCTOR
vehData::~vehData(){
delete []data;
}

/* TRYING TO ACCOMPLISH THIS WITH AN OSTREAM OVERLOAD */
void vehData::saveDataSloppy(){
ofstream myFile;
myFile.open ("database.db");
for(int i=0;i<used;i++){
myFile << data[i].getOwnerName() << "|";
myFile << data[i].getVehicleLicense() << "|";
myFile << data[i].getVehicleMake() << "|";
myFile << data[i].getVehicleModel() << "|";
myFile << data[i].getVehicleYear() << "\n";
}
myFile.close();
}

void vehData::saveData(){
cout << data;
}

ostream &operator<<(ostream &stream, const vehData &v){
stream << v.data;
}
}

最佳答案

v.data是一个指针,所以它打印一个指针。你想让它怎么样打印指针指向的任何内容。除了性格指针,<<总是打印你给它的东西(以某种格式方式)。如果你不希望它打印一个指针,给的是别的东西。

假设它确实解除了对指针的引用。它应该打印什么:一个 vehReg ? 20?指针没有关于大小的信息。如果你用过std::vector<vehReg> (一个更好的选择),它会知道大小,但 std::vector 上仍然没有过载, 因为系统仍然不知道您希望它如何格式化(逗号分隔?每个都在一个新行上?)。而且您还没有告诉它如何打印 vehReg要么。

您显然了解如何重载 << 的想法.首先你要做的就是为 vehReg 提供一个过载以及。并且两个重载都必须根据现有重载来定义:std::vector 没有一个,而指针的那个不做你想要什么(也不能),所以你必须循环你的 <<为了 vehData并使用您决定的任何分隔符输出每个元素在。 (如果每个元素都在自己的行上,那么您可以使用 std::copy和一个 ostream_iterator for循环,但这可能会提前一点到目前为止你学到的东西。)并转发到 <<对于 vehReg为了每个vehReg .

关于C++ 重载指针 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413110/

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