摘要的指針的一個向量我有2個純虛函數的抽象類:呼叫功能從
class CCobjectBase
{
public:
CCobjectBase();
virtual void setCordFigure(double *, int) = 0;
virtual double* getCord() = 0;
};
和A類是從抽象之一導出:
class CTriangle : public CCobjectBase
{
public:
CTriangle();
~CTriangle();
void setCordFigure(double *, int);
double* getCord();
private:
double *m_cord;
int m_size;
}
void CTriangle :: setCordFigure(double *cord, int size)
{
m_cord = cord;
m_size = size;
}
double * CTriangle :: getCord()
{
return m_cord;
}
我使用了一個抽象類的指針向量:
std::vector<CCobjectBase *> m_objectBaseList;
而我創建並存儲一些值在這個向量中S請按照:
for(size_t i=0; i< m_objectBaseList.size(); i++)
{
double * cord = m_objectBaseList.at(i) -> getCord();
out<<cord[0]<<" "<<cord[1]<<" "<<cord[2]<<" "<<cord[3]<<" "<<cord[4]<<" "<<cord[5]<<endl;
}
似乎所有的對象都存儲在相同的價值觀:
m_objectBaseList.push_back(new CTriangle());
m_objectBaseList.at(m_objectBaseList.size() - 1) -> setCordFigure(coordonate, size);
當我試圖從矢量顯示值將出現問題。我嘗試了多種解決方案,但我不能簡單地理解它。如果我給輸入如下:
Object1: 1 2 3 4 5 6
Object2: 3 2 3 3 5 5
...
Objectn: 1 1 2 2 1 1
所有對象都具有Objectn的價值:
Object1: 1 1 2 2 1 1
Object2: 1 1 2 2 1 1
...
Objectn: 1 1 2 2 1 1
問題不是從參數coordonate
,因爲我在測試setCordFigure(double *cord, int size){} function
,它顯示的罰款。
任何可能的消耗?
編輯:
,我設置的值代碼的部分實際是這樣的:
void MainWindow :: creazaObiecte(int numarOrdine, double *coordonate, int size)
{
QTextStream out(stdout);
switch(numarOrdine)
{
case 1:
m_objectBaseList.push_back(new CTriangle());
m_objectBaseList.at(m_objectBaseList.size() - 1) -> setCordFigure(coordonate, size);
break;
...
}
}
我使用此功能從我讀文件的每一行。在那裏我調用這個函數的代碼的部分是這樣的:
while(--condition--)
{
double coordonate[30]; //coordonate is used to store values as an array Ex: 20 30 12 2 32 12 etc
//fill coordonate with values from the line of the file
creazaObiecte(ordinClasa, coordonate, size); //ordinClasa is a variable that stores the index of the object (1 stands for triangle)
}
我假設'coordonate'是一個你可以在某個循環中重用的數組。由於'setCordFigure'不復制值,但只存儲對它們的引用,所有數字都指向相同的數據。所以最後所有的數字都有你最後輸入的'cord'。 – Albjenow