初始化班级的不存在成员
Initializing a non-existent member of a class?
这是代码(从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)
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 我们可以访问一个不存在的联盟的成员吗
- 为什么我的类成员不存在?
- 调用成员函数,尽管该对象不存在
- 就SFINAE而言,访问不存在的成员不被视为"error"吗?
- 在不存在的对象上调用静态成员函数
- 尽管使用不存在的成员,但程序编译
- 为什么C++中不存在对成员的引用?
- 初始化班级的不存在成员
- C++ vector 中不存在的字符串成员变量
- 类模板成员不存在错误
- 类成员突然变得不可访问/不存在
- 根据类成员的存在/不存在专门化C++模板
- 通过模板调用可能不存在的成员函数
- 访问可能不存在的const vector成员- try/catch或if (count != 0)
- WndProc和DispatchMessage的奇怪错误。成员函数不存在?
- Qt动画 - 成员不存在
- 对不存在的对象调用成员函数工作正常,c++
- 区分不明确的成员请求错误和 SFINAE 上下文中成员不存在的错误
- 如何在不知道成员类型的情况下与SFINAE核实成员是否存在?