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