我的目標是使類粒子序列化的,問題是:C++使用構造作爲成員函數(對於序列化)
在派生類從istream的讀取時,我可以使用粒子基類的構造函數構件「初始化」功能?
//誤解的可能原因: 我知道我可以編寫setter,但是當代碼塊在Particle的實例上應用訪問運算符時顯示構造函數爲可用成員函數時,我偶然發現了此選項/想法。我從來沒有聽說過這種「遲到」初始化的方式,但我希望它不僅僅是編寫大量的setter ...
所以基本上,這段代碼是正確的嗎?
using namespace std;
struct Serializable {
virtual void write(ostream&) const = 0;
virtual void read(istream&) = 0;
virtual ~Serializable() {}
};
class Particle {
double X, Y;
public:
Particle(double x=0, double y=0) :X(x), Y(y) {}
//...
};
class PParticle: Particle, Serializable {
//void write...
void read(istream& is) {
double x, y;
cout<<"coord x: "; is>>x;
cout<<"coord y: "; is>>y;
this->Particle(x, y); //this is the questionable line
}
};
如果不是,或者如果我對序列化的想法完全錯誤,有人可能會顯示替代方案,我會非常感謝!
爲什麼不只是'this-> X = x; this-> Y = y;'?你爲什麼要調用構造函數? –
與此同時我只是試了一下,我得到錯誤:無效使用'粒子::粒子'。 爲什麼代碼塊提供構造函數作爲可用的成員函數? – HONDDAACCORD
@CodyGray因爲X和Y是私人的,那就是主要問題 – HONDDAACCORD