2016-02-03 58 views
-2

在類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; 

} 
+3

將代碼的大小縮小到有問題的部分。 –

+0

這是一個猜測,所以我不會將它寫成答案,但是您可能想要擺脫PHYS_FIELD中的實例字段 - 它可能會從DIM中「遮蔽」字段。 (我不知道C++編碼器是否使用「陰影」,這是一個Java術語。) –

回答

0

修改類ARR1並添加接受零個參數(這樣我們可以聲明ARR1 G和後來在DIM :: DIM構建它構造構造函數

arr1() 
{ 

} 

class DIM:

protected: 
    arr1<double> G;  //I've moved G from the constructor so that PHYS_FIELD can inherit it directly 


DIM::DIM() 
{ 
    N=10; 
    G = arr1<double>(N); 

    for (int i=0; i<N; i++) 
     G(i)=i; 

}; 

類PHYS_FIELD

從PHYS_FIELD頭刪除arr1<double> G;,使其不隱藏克來自DIM

PHYS_FIELD::PHYS_FIELD() { //removed G(N) 

    cout << " from phys_field.cpp " << endl; 
    cout << N << endl; 

    for (int i=0; i<N; i++) 
     cout << i << " " << G(i) << endl; 

}; 

繼承這是你在找什麼?

+0

Jose,謝謝!但現在它是一個分段錯誤。可能是一個提示:我從DIM向PHYS_FIELD傳遞了動態創建的雙數組,這是可以的。但是用arr1我有一個問題。 – Maxim

+0

謝謝,它的工作;) – Maxim

+0

@Maxim沒問題。也許把我的答案標記爲正確的答案?這通常是在這個網站xD中完成的 – Jts