[問題] 子類別陣列轉型成父類別指標問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
C++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
對於轉型的部份不熟悉
想請問高手這樣寫是否會有問題,
如果把子類別的陣列餵進父類別的指標
接下來對陣列取值可以取到正確的值嗎
程式碼(Code):(請善用置底文網頁, 記得排版)
class Base
{
protected:
int a;
public:
int getA(){ return a; }
};
class Derived : public Base
{
protected:
int b;
};
class Set
{
protected:
Base* dataArray;
public:
run1()
{
int c = 5;
dataArray = new derived[c];
cout << dataArray[3].getA(); // case 1
}
};
run2(Base* b, int index )
{
cout << b[index].getA();
}
int main()
{
Set set1;
set1.run1();//case 1
Derived set2[5];
run2(set2, 3);// case 2
return 0;
}
想請問case1和case 2這兩個情況下是否能夠提取到正確的 a
因為Base和Derived不一樣大 用Base陣列下去算Derived的東西似乎會錯?
然後也請強者解釋一下我的觀念 非常感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.182.130
推
06/06 21:08, , 1F
06/06 21:08, 1F
→
06/06 21:08, , 2F
06/06 21:08, 2F
那請問一下如果想做類似case 1 的處理(把子類別陣列丟到某東西處理)
要怎麼寫比較方便
我知道可以用雙重指標 不過這樣寫還是不太直觀
※ 編輯: whoowh 來自: 114.34.216.47 (06/06 22:10)
推
06/06 22:12, , 3F
06/06 22:12, 3F
→
06/06 22:19, , 4F
06/06 22:19, 4F
→
06/06 22:20, , 5F
06/06 22:20, 5F
要詳細解釋可能可以這樣說:
父類別是水果
然後子類別是蘋果
然後接下我希望在某個類別可以寫
"一次處理一大串水果的函數" 所以定義了水果指標
然後丟一個蘋果陣列進去讓他處理 可是會有問題就不知道要怎麼辦這樣
如果只針對蘋果做處理那當然OK 不過這樣就不夠廣義 有點頭痛~"~
→
06/07 00:46, , 6F
06/07 00:46, 6F
想請問這邊怎麼做
→
06/07 00:51, , 7F
06/07 00:51, 7F
※ 編輯: whoowh 來自: 114.34.216.47 (06/07 01:51)
※ 編輯: whoowh 來自: 114.34.216.47 (06/07 01:52)
※ 編輯: whoowh 來自: 114.34.216.47 (06/07 02:11)
→
06/07 02:22, , 8F
06/07 02:22, 8F
這樣好像會run time error 我猜轉成最基底的話編譯器不知道陣列的offset多大..
※ 編輯: whoowh 來自: 60.248.183.2 (06/07 10:03)
推
06/07 10:24, , 9F
06/07 10:24, 9F
→
06/07 10:25, , 10F
06/07 10:25, 10F
→
06/07 10:35, , 11F
06/07 10:35, 11F
→
06/07 11:12, , 12F
06/07 11:12, 12F
→
06/07 11:36, , 13F
06/07 11:36, 13F
推
06/07 12:27, , 14F
06/07 12:27, 14F
→
06/07 12:28, , 15F
06/07 12:28, 15F
→
06/07 12:29, , 16F
06/07 12:29, 16F
是說像這樣嗎
我現在的作法是
Base** pDataArray;
pDataArray = new Base*[numOfObjects];
要用物件的時候
pDataArray[i]->getA();
^^^^^^^^^^^^^這個指標可以拿來指derived物件
不過總覺得很不直觀....
※ 編輯: whoowh 來自: 210.66.52.167 (06/07 12:34)
※ 編輯: whoowh 來自: 210.66.52.167 (06/07 12:35)
→
06/07 12:41, , 17F
06/07 12:41, 17F
推
06/07 12:41, , 18F
06/07 12:41, 18F
推
06/07 12:50, , 19F
06/07 12:50, 19F
→
06/07 13:14, , 20F
06/07 13:14, 20F
→
06/07 13:14, , 21F
06/07 13:14, 21F
→
06/07 13:15, , 22F
06/07 13:15, 22F
→
06/07 13:15, , 23F
06/07 13:15, 23F
→
06/07 13:16, , 24F
06/07 13:16, 24F
→
06/07 13:17, , 25F
06/07 13:17, 25F
→
06/07 13:17, , 26F
06/07 13:17, 26F
→
06/07 13:19, , 27F
06/07 13:19, 27F
→
06/07 13:20, , 28F
06/07 13:20, 28F
→
06/07 13:21, , 29F
06/07 13:21, 29F
推
06/07 13:21, , 30F
06/07 13:21, 30F
→
06/07 13:21, , 31F
06/07 13:21, 31F
→
06/07 13:24, , 32F
06/07 13:24, 32F
→
06/07 13:26, , 33F
06/07 13:26, 33F
→
06/07 13:27, , 34F
06/07 13:27, 34F
→
06/07 13:33, , 35F
06/07 13:33, 35F
→
06/07 13:36, , 36F
06/07 13:36, 36F
→
06/07 13:37, , 37F
06/07 13:37, 37F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 3 篇):