0

我有一个用户定义的类,比如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.

我该如何处理?

如果这里没有解决方案,还有其他方法可以发送类对象吗?

谢谢你。

4

0 回答 0