0
のオーバーロード、私は単純なクラスのための演算子をオーバーロードする方法を知っていると、以下のコードはサンプルです。QDataStream演算子<< Iは、仮想オペレータとして<strong>抽象クラス</strong>ため<strong>< <</strong>演算子をオーバーロードしたい抽象クラス
class NormalClass
{
public:
int firstField() const;
void setFirstField(int firstField);
int secondField() const;
void setSecondField(int secondField);
private:
int m_firstField;
int m_secondField;
};
QDataStream &operator<<(QDataStream &out, const NormalClass &obj)
{
out << obj.firstField();
out << obj.secondField();
return out;
}
しかし、今の我々は今、私はChildClassがそれを実装する必要がありAbstractBaseClassため< <演算子をオーバーロードしたい
class AbstractBaseClass
{
public:
AbstractBaseClass() {}
int BaseFirstField() const;
void setBaseFirstField(int BaseFirstField);
int BaseSecondField() const;
void setBaseSecondField(int BaseSecondField);
private :
int m_BaseFirstField;
int m_BaseSecondField;
};
class ChildClass : public AbstractBaseClass
{
public:
ChildClass() {}
int ChildFirstField() const;
void setChildFirstField(int ChildFirstField);
private:
int m_ChildFirstField;
}
下回るようAbstractBaseClass、ChildClassを持っているとしましょう。 、仮想外のクラス宣言を使用すると、任意のアイデアを持っています:
これは、コンパイラが文句を言い
#ifndef ABSTRACTBASECLASS_H
#define ABSTRACTBASECLASS_H
#include <QDataStream>
class AbstractBaseClass
{
public:
AbstractBaseClass();
int BaseFirstField() const;
void setBaseFirstField(int BaseFirstField);
int BaseSecondField() const;
void setBaseSecondField(int BaseSecondField);
private :
int m_BaseFirstField;
int m_BaseSecondField;
};
virtual QDataStream &operator<<(QDataStream &out, const AbstractBaseClass &obj)=0;
#endif // ABSTRACTBASECLASS_H
私の試しているのですか?