C++使用构造函数作为成员函数(用于序列化)

C++使用构造函数作为成员函数(用于序列化),c++,serialization,constructor,C++,Serialization,Constructor,我的目标是使类粒子可序列化,问题是: 在派生类中从istream读取时,我可以使用粒子基类的构造函数作为初始化的成员函数吗 //可能产生误解的原因: 我知道我可以编写setter,但当对粒子实例应用access操作符时,codeblocks将构造函数显示为可用的成员函数时,我偶然发现了这个选项/想法。我从来没有听说过这种延迟初始化的方式,但我更喜欢它,而不是编写大量的setter 那么基本上,这个代码正确吗 using namespace std; struct Serializable {

我的目标是使类粒子可序列化,问题是:

在派生类中从istream读取时,我可以使用粒子基类的构造函数作为初始化的成员函数吗

//可能产生误解的原因: 我知道我可以编写setter,但当对粒子实例应用access操作符时,codeblocks将构造函数显示为可用的成员函数时,我偶然发现了这个选项/想法。我从来没有听说过这种延迟初始化的方式,但我更喜欢它,而不是编写大量的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->Particle(x, y);
该语言不允许在构造对象后对其调用构造函数

一个解决方案

在粒子中添加成员函数以设置x和y

在PParticle中使用它们:阅读

PS

我把线移走了

    cout<<"coord x: ";
    cout<<"coord y: ";

因为它们只有在你阅读cin时才有用。如果你从一个文件中读取一个PParticle,它们是无用的。

你提到的那行不会编译。如果删除了this->,它将进行编译,但它只会创建一个新的临时粒子对象,该对象将在函数结束时被销毁。所以它不会正确设置当前对象的X,Y,它们也不会改变


一个可能的解决方案是为变量X,Y使用protected,以防您不想为每个变量定义setter。这样,PParticle类和粒子的所有其他派生类都可以访问和修改它们。

为什么不这样做->X=X;这个->Y=Y;?为什么要调用构造函数?同时我刚刚尝试了它,我得到了一个错误:“Particle::Particle”的用法无效。为什么代码块提供构造函数作为可用的成员函数?@CodyGray因为X和Y是私有的,这是主要问题。你应该让他们受到保护。
void read(istream& is) {
    double x, y;
    is>>x;
    is>>y;
    setX(x);
    setY(y);
}
    cout<<"coord x: ";
    cout<<"coord y: ";