查看完整版本: [-- 《Qt设计模式》一书中一个疑问 --]

QTCN开发网 -> 《Qt设计模式》(第2版) 图书专栏 -> 《Qt设计模式》一书中一个疑问 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

whr4935 2014-05-18 21:04

《Qt设计模式》一书中一个疑问

    英文版的201页,Example 6.27的 argumentlist.cpp中的一个成员函数如下:
  1. void ArgumentList::argsToStringList(int argc, char *argv[])
    {
        for (int i = 0; i < argc; ++i) {
            *this += argv[i];
        }
    }
*this 为ArgumentList类型,它继承自QStringList类型,argv为 char*类型,但是,为什么他们可以直接用 += 赋值?
    QStringList类型可以还是好理解,它重载了+=操作符,难道因为ArgumentList类型是继承自QSringList类型,它就也
可以这样用 += 赋值了?

noidea 2014-05-19 00:14
QStringList 的operator+= 继承于QList,它的属性是public的,所以你的ArgumentList的Operator+=也继承了该重载。

参考文档:
http://qt-project.org/doc/qt-5/QStringList.html#adding-strings

realfan 2014-05-19 08:39
QList<T> &    operator+=(const QList<T> & other)
QList<T> &    operator+=(const T & value)

+=有两个重载,可以是另一个List,也可以是Qlist的值。
这里用的是第二个。
相当于QList<QString>   +=  QString
有个char*到QString的自动转换

whr4935 2014-05-19 22:57
谢谢二位的回答,这里的 += 确实是QList重载的,开始疑惑在*this是ArgumentList类型的,觉得会类型不匹配。


查看完整版本: [-- 《Qt设计模式》一书中一个疑问 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled