2011-10-04 76 views
0

我有一個程序可以解決用C語言編寫的大網格中的PDE,但是希望將它移植到C++中來學習面向對象的編程。C++一種或另一種類型的指針?

我的問題是,我有兩個數據結構,讓我們打電話給他們Class1Class2。爲了讓事情簡單讓我們假設Class1的包含兩個雙打(一個b)和等級2包含四個雙打(A,B,Cd)。

現在,在運行時,我想要生成某種類型的動態數組,它將根據PDE的條件保持一個類另一個類。

喜歡的東西:

if (PDEtype == 1) pointer = new Class1[n]

else    pointer = new Class2[n] 

然後,我將需要訪問指針的東西,如:pointer[2].a = 1.0pointer[4].d = 10.0

一名工會不會起作用,因爲我需要存儲最低的內存量。 (我會與可能數百萬分的大問題)

有沒有辦法在C++中做到這一點?

在此先感謝!

+0

問題是,必須始終有一些方法來確定您正在使用哪個類。一種方法是識別您正在使用的類型的通用屬性(例如,類型)。然而,這不被認爲是好的OOP。另一種方法是通過虛擬方法(多態)。這兩個都會增加對象的大小。如果你關心數據密度(數百萬分),你應該堅持使用C,因爲C++ OOP不會提供任何額外的好處。如果你確實要跟OOP一起學習繼承和多態。 – Artomegus

+0

我認爲這是一個「描述你的問題,而不是你決定採取的第一步」的經典案例。 –

回答

0

如果您的Class2實際上是從Class1派生的,則可以有一個Class1*的數組。如果不是的話,我會將Class1Class2都設爲一個公共基類,並且有一個BaseClass*的數組。

當然,您需要一些方法來了解條目的實際內容(如果適用,最好在C++中使用虛擬功能完成)。

+0

嗨弗拉德,謝謝你的答案。 我試過了。我從Class1派生出Class2並生成了一個Class1的動態數組,但是當我嘗試訪問Class2中的數據時,編譯器說'class Class1'沒有名爲'xxxx'的成員(來自Class2的變量之一,但不在Class1中) – user978708

+0

那麼,你需要一些方法來知道哪種數據在那裏。要麼單獨存儲這些信息,要麼將其包含在結構本身中。或者你可以實際上兩個單獨的數組。問題是,爲什麼你需要「手動」訪問數據?爲什麼不創建一個虛擬方法來爲你做?你想達到什麼目的? – Vlad

0

你有什麼實際上很接近。問題是你需要事先創建指針,然後調用新的Class1 [n]。你的問題似乎需要弄清楚如何事先聲明指針。

有,我能想到的兩個選項:

1)不擔心聲明兩個不同的指針類型。聲明一個指針類型(在這種情況下,將它作爲Class2是有意義的 - 因爲Class1可以被認爲是Class1的「子集」),然後只需將Class2中任何未使用的值聲明爲某個指定值,表示它們未被使用。

2)我甚至不太確定這種技術是否正確,但是肯定會沿着這些線路工作:將指針聲明爲Void *類型。您還需要定義ptr1和ptr2以分別指向Class1和Class2的類型。你會希望你的Void *指針實際指向你正在定義的類,然後創建一個函數來轉換這個void *指針來鍵入ptr1(一個指向Class1類型的指針)或ptr(指向一個Class2類型的指針)。

這很像創建一個void *(指向void類型的指針),然後將其轉換爲整數,如果您的內存位置實際上包含ints。你可以把這個強制轉換爲一個指向整數的指針。

最後,在你的例子中,你會說「pointer [2] .a = 1.0」和「pointer [4] .d = 10.0」。你正在創建一個類的數組?如果你想讓你的指針指向一個類,那麼你最終會使用「pointer.a」和「pointer.d」,對吧?

相關問題