私はユーザー定義のクラスを持っています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
。この回答に従って、私はを使用でき、この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
どうでしょうか? Derived1
タイプかどうかはわかりませんDerived2
。
どうすればこれを処理できますか?
ここに解決策がない場合、クラスオブジェクトを送信する他の方法はありますか?
ありがとうございました。