我有一个用户定义的类,比如MyClass
. 假设它的定义如下:
class MyClass
{
int a;
int *b;
Base *c;
};
我在哪里
class Base
{
int base_data;
public:
Base(int) { //implementation }
virtual void some_func() = 0;
}
和
class Derived1 : public Base
{
int derived_1;
public:
Derived1(int) { //implementation }
virtual void some_func() { //implementation }
}
和
class Derived2 : public Base
{
int derived_2;
public:
Derived2(int) { //implementation }
virtual void some_func() { //implementation }
}
我想将此类的一个对象发送到QTcpsocket
. 根据这个答案,我可以使用 a QDataStream
,并且在这个的帮助下,我实现了如下:
friend QDataStream& operator<<(QDataStream&, const MyClass&);
friend QDataStream& operator>>(QDataStream&, MyClass&);
在类声明中,并正在考虑将其定义为:
QDataStream& operator<<(QDataStream &stream, const MyClass &obj)
{
stream << obj.a;
stream << obj.(*b);
stream << obj.(*Base); // assume QDataStream has been overloaded for Base already
}
由于我需要发送数据,我正在取消引用指针并发送它指向的数据。
这是正确的方法吗?
如果我确实以这种方式发送它,我将无法理解如何在接收端重新创建对象。我正在考虑:
QDataStream& operator<<(QDataStream &stream, MyClass &obj)
{
stream >> obj.a;
b = new int;
stream >> obj.(*b);
Base = new //what?
stream >> obj.(*Base); // assume QDataStream has been overloaded for Base already
}
对于int
指针,我可以创建一个new int
并将传入的值分配给它。但是类型的指针Base
呢?不知道是 typeDerived1
还是Derived2
.
我该如何处理?
如果这里没有解决方案,还有其他方法可以发送类对象吗?
谢谢你。