初始化班级的不存在成员

Initializing a non-existent member of a class?

本文关键字:不存在 成员 初始化      更新时间:2023-10-16

这是代码(从QT4的C 中的设计模式简介),在第9行,我猜QString(other)给出了QString对象,但是这里是初始化的?

#include <QList>
#include <QtAlgorithms>   // for qSort()
#include <QStringList>
#include <QDebug>
class CaseIgnoreString : public QString {
public:
    CaseIgnoreString(const QString& other = QString())
    : QString(other) {} //  
    bool operator<(const QString & other) const {
        return toLower() < other.toLower();
    }
    bool operator==(const QString& other) const {
        return toLower() == other.toLower();
    }
};
int main() {
    CaseIgnoreString s1("Apple"), s2("bear"),
                     s3 ("CaT"), s4("dog"), s5 ("Dog");
    Q_ASSERT(s4 == s5);
    Q_ASSERT(s2 < s3);
    Q_ASSERT(s3 < s4);
    QList<CaseIgnoreString> namelist;
    namelist << s5 << s1 << s3 << s4 << s2; /* Insert
        all items in an order that is definitely not sorted. */
    qSort(namelist.begin(), namelist.end());
    int i=0;
    foreach (const QString &stritr, namelist) {
        qDebug() << QString("namelist[%1] = %2")
                       .arg(i++).arg(stritr) ;
    }
    QStringList strlist;
    strlist << s5 << s1 << s3 << s4 << s2; /* The value
       collection holds QString but, if you add CaseIgnoreString,
       a conversion is required. */
    qSort(strlist.begin(), strlist.end());
    qDebug() << "StringList sorted: " + strlist.join(", ");
    return 0;
}

它不是成员的初始化,而是对基类初始化的明确调用。请参阅为什么要在C 中明确调用构造函数以进行更多说明。

在此构造函数中

CaseIgnoreString(const QString& other = QString())
: QString(other) {} //  

其他参数有一个默认参数。如果用户无法指定参数,则编译器将使用通过调用constructor qString()创建的临时对象初始化参数。此参数用于使用CTOR初始化器列表

来初始化Caseignorestring的基类
: QString(other)