[英]Override methods in C++
我應該創建一個代表二維點的基類(P2D)和一個代表三維點的派生類(P3D)。 在第一堂課中,我以這種方式創建了一個方法:
virtual istream& set(istream&); //sets the values
istream& P2D::set(istream& in){
in >> x >> y;
return in;
}
在第二堂課中:
istream& set(istream&); //sets the values
istream& P3D::set(istream& in){
P2D::set(in);
in >> z;
return in;
}
在主函數中,我考慮過將所有點(無論它們是二維還是三維)放入向量中,然后考慮使用上述set
方法以某種方式在一段while
設置所有點。 這是有問題的代碼:
vector<P2D*> points;
bool ans(true);
P2D* p;
while(ans){
cout << "Insert a point" << endl;
p->set();
points.push_back(p);
cout << "Do you want to insert another point? ";
cin >> ans;
}
我知道這是錯誤的,我知道為什么,但是有沒有機會不使用動態記憶來克服這一問題? 我是否要讓用戶選擇是否要插入二維或三維點?
在我看來,這似乎很麻煩,因為繼承意味着“是”關系,而3D點絕對不是2D點。
這反映了您的問題,因為您沒有建議的優雅方法。 IMO,用戶必須決定輸入2D還是3D點,但是將其保留為2D點集合仍然沒有任何意義。
這完全取決於您以后打算對集合中的點進行處理。 也許您應該將Point
類型作為2D和3D點的父級,但是如果沒有更大的上下文很難說清。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.