c++ - 为什么我能够创建一个复制构造函数并重载 QObject 子类的赋值运算符?

标签 c++ qt qobject

我的印象是 QObject 禁用了复制构造函数和赋值运算符......为什么我能够编译包含这两者的这个 QObject 派生?

#ifndef QVERSION_H
#define QVERSION_H

#include "silverlocklib_global.h"
#include <QtCore>

struct SILVERLOCKLIBSHARED_EXPORT QVersion : public QObject
{
    Q_OBJECT
    Q_PROPERTY(bool valid READ isValid)
    Q_PROPERTY(long major READ major)
    Q_PROPERTY(long minor READ minor)
    Q_PROPERTY(long build READ build)
    Q_PROPERTY(long revision READ revision)

public:
    QVersion(long major = 0, long minor = 0, long build = -1, long revision = -1, QObject *parent = NULL);
    QVersion(const QString &version, QObject *parent = NULL);
    QVersion(const QVersion &version);
    static QVersion parse(const QString& version, bool *ok = NULL);
    bool isValid() const;
    long compareTo(const QVersion &other) const;
    bool equals(const QVersion &other) const;
    QString toString() const;
    QString toString(int fieldCount) const;
    long major() const;
    inline int majorRevision() const { return (qint16)(this->m_revision >> 16); }
    long minor() const;
    inline int minorRevision() const { return (qint16)(this->m_revision & 65535); }
    long build() const;
    long revision() const;
    QVersion& operator=(const QVersion &version);
    friend bool operator==(const QVersion &v1, const QVersion &v2);
    friend bool operator!=(const QVersion &v1, const QVersion &v2);
    friend bool operator<(const QVersion &v1, const QVersion &v2);
    friend bool operator<=(const QVersion &v1, const QVersion &v2);
    friend bool operator>(const QVersion &v1, const QVersion &v2);
    friend bool operator>=(const QVersion &v1, const QVersion &v2);

private:
    inline static void copy(QVersion *const destination, const QVersion &source);
    static bool tryParseComponent(const QString &component, long *parsedComponent);

    long m_major;
    long m_minor;
    long m_build;
    long m_revision;
};

#endif // QVERSION_H

最佳答案

派生类总是可以声明它自己的复制构造函数和赋值运算符。如果基类通过将其设为私有(private)并将其保留为未定义来禁用它,则派生类当然无法在其自己的实现中调用基类的版本,但它仍然可以实现它们。

关于c++ - 为什么我能够创建一个复制构造函数并重载 QObject 子类的赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074518/

相关文章:

android - 快速解码 JPEG 图像的方法

c++ - 在 C++ 程序中使用 to_string 时出现编译错误

qt - 执行Google Test后,Jenkins Build脚本退出

c++ - QTableView QStandardItemModel 恢复或撤消用户输入

qt - 如何知道哪个 QObject::connect 失败

c++ - static_assert 意外行为

Qt Creator 和外部库无法链接(HALCON)

c++ - 交换 Qt 小部件

c++ - 为什么我不能拥有带有此签名的 Q_PROPERTY?

c++ - 使用 Qt 跨 HTTP Protocol Buffer 序列化中的空白