我知道我可以使用一些叫做的东西std::vector,但我担心因为课程限制而无法做到这一点.
我需要创建一个动态可扩展的对象数组.当需要存储新对象时,阵列应该增长和增长.
这是该数组所属的类:
class TransactionList
{
private:
Transaction *trans;
int amountTransactions;
Transaction newTrans;
public:
TransactionList();
~TransactionList();
void read( istream &is );
void write( ostream &os );
void add( Transaction & newTrans );
double totalExpenses();
double hasPaid( string namnet );
double isDebted( string namnet );
//PersonList FixPersons();
};
Run Code Online (Sandbox Code Playgroud)
方法"void add(Transaction&newTrans)"是我需要的方法.是的,我认真地必须做指针式.
到目前为止,这种方法完全不完整,甚至还没有接近功能.我已经尝试了几种不同的方法,但最终会出现运行时错误或仅仅是bollocks结果.
void TransactionList::add(Transaction & newTrans)
{
Transaction* tempArrPtr;
amountTransactions++;
trans = new Transaction[amountTransactions]
trans[amountTransactions - 1] = newTrans;
}
Run Code Online (Sandbox Code Playgroud)
我想要的方法是构建一个Transaction-objects数组,并在获取更多对象时增大其大小.
我希望我已经清楚地写了我的问题,希望有人能给我一个很好的答案.我试过谷歌搜索,但我仍然卡住了 - 否则我不会打扰他们:p
如果有人可以给出一些关于复制构造函数的指示,我会非常感激.在我们的课程材料中,他们几乎甚至没有展示复制构造函数应该是什么样子.就像"你需要复制构造进行深度复制,祝你好运!"
您应该添加一个maxTransactions变量,它将指示trans*数组的已分配长度,并初始化两者ammountTransactions并maxTransactions使用0.
当我们达到trans的极限时,你的数组会自动加倍
void TransactionList::add(Transaction & newTrans)
{
if(amountTransactions == maxTransactions){ //we've reached the capacity of trans
//allocate a new array
Transaction* nuTrans = new Transaction[maxTransactions*2+1];
//copy the old values of trans into nuTrans
memcpy(nuTrans, trans, sizeof(Transaction)*maxTransactions);
//deallocate the old trans array
delete []trans;
//set trans to point at your newly allocated array
trans = nuTrans;
//update maxTransactions
maxTransactions = maxTransactions*2+1;
}
trans[amountTransactions] = newTrans;
amountTransactions++;
}
Run Code Online (Sandbox Code Playgroud)
PS.我在这里直接写了它,我没有检查它是否作为一个整体编译或没有调试代码.但我把它作为你可以遵循的想法
编辑:工作示例@ http://ideone.com/uz1mE