簡體   English   中英

C ++中的重寫方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM