可能重複對象的虛函數:
Overriding parent class’s function如何調用C++
我與調用在C虛函數++掙扎。我沒有C++經驗,我主要使用C#和Java,所以我可能會有一些妄想,但忍受着我。
我必須編寫一個程序,我必須儘可能避免動態內存分配。我創建了一個名爲List的類:
template <class T> class List {
public:
T items[maxListLength];
int length;
List() {
length = 0;
}
T get(int i) const {
if (i >= 0 && i < length) {
return items[i];
} else {
throw "Out of range!";
}
};
// set the value of an already existing element
void set(int i, T p) {
if (i >= 0 && i < length) {
items[i] = p;
} else {
throw "Out of range!";
}
}
// returns the index of the element
int add(T p) {
if (length >= maxListLength) {
throw "Too many points!";
}
items[length] = p;
return length++;
}
// removes and returns the last element;
T pop() {
if (length > 0) {
return items[--length];
} else {
throw "There is no element to remove!";
}
}
};
它只是生成一個給定類型的數組,並管理它的長度。
無需動態內存分配,我可以只寫:
List<Object> objects;
MyObject obj;
objects.add(obj);
MyObject來繼承表單對象。對象有哪些是應該在爲MyObject被覆蓋的虛函數:
struct Object {
virtual float method(const Input& input) {
return 0.0f;
}
};
struct MyObject: public Object {
virtual float method(const Input& input) {
return 1.0f;
}
};
我得到的元素:
objects.get(0).method(asdf);
的問題是,即使第一個元素是myObject的,對象的方法函數被調用。我猜測存儲對象的數組中沒有爲MyObject動態分配內存有問題,但我不確定。
有沒有辦法調用MyObject的方法函數?怎麼樣?它應該是一個異構集合順便說一句,所以這就是爲什麼繼承是在那裏擺在首位。
如果沒有辦法調用MyObject的方法函數,那麼我應該如何在第一個地方創建我的列表?
此外,我無法訪問math.h和stdlib.h之外的庫,因此無法使用vector。
對象切片總是很有趣。你需要一個指針列表。 – chris
http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c什麼切片是 – Mat