在類Dim我創建了數組G,我想將它傳遞給派生類PHYS_FIELD。輸出(0..9)代替輸出(0..0)。我意識到這只是G的新副本,但我不知道如何正確地做到這一點。將數組傳遞給C++中的派生類
arr1.h
:
#ifndef ARR1_H
#define ARR1_H
#include<iostream>
using namespace std;
template <class T> class arr1
{
public:
T* data;
size_t size;
arr1(const size_t isize)
{ size=isize;
data = new T[size];
}
T & operator()(size_t const index)
{ return data[index]; }
};
#endif /*ARR1_H */
dim.h
:
#ifndef DIM_H
#define DIM_H
#include "arr1.h"
class DIM {
public:
DIM();
protected:
int N;
};
#endif /* DIM_H */
dim.cpp
:
#include "arr1.h"
#include "dim.h"
using namespace std;
DIM :: DIM()
{
N=10;
arr1<double> G(N);
for (int i=0; i<N; i++)
G(i)=i;
};
phys_field.h
:
#ifndef PHYS_FIELD_H
#define PHYS_FIELD_H
#include "dim.h"
#include "arr1.h"
class PHYS_FIELD : public DIM {
public:
PHYS_FIELD();
arr1<double> G;
};
#endif /* PHYS__FIELD_H */
phys_field.cpp
:
#include "dim.h"
#include "phys_field.h"
#include <arr1.h>
using namespace std;
PHYS_FIELD :: PHYS_FIELD(): G(N) {
cout<< " from phys_field.cpp "<<endl;
cout<<N<<endl;
for (int i=0; i<N ; i++)
cout<<i<<" "<<G(i)<<endl;
};
main.cpp
:
#include "dim.h"
#include "phys_field.h"
using namespace std;
int main(int argc, char* argv[]){
PHYS_FIELD *F= new PHYS_FIELD();
return 0;
}
將代碼的大小縮小到有問題的部分。 –
這是一個猜測,所以我不會將它寫成答案,但是您可能想要擺脫PHYS_FIELD中的實例字段 - 它可能會從DIM中「遮蔽」字段。 (我不知道C++編碼器是否使用「陰影」,這是一個Java術語。) –