• 6048阅读
  • 3回复

[提问]《Qt设计模式》一书中一个疑问 [复制链接]

上一主题 下一主题
离线whr4935
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-18
    英文版的201页,Example 6.27的 argumentlist.cpp中的一个成员函数如下:
  1. void ArgumentList::argsToStringList(int argc, char *argv[])
  2. {
  3.     for (int i = 0; i < argc; ++i) {
  4.         *this += argv[i];
  5.     }
  6. }
*this 为ArgumentList类型,它继承QStringList类型,argv为 char*类型,但是,为什么他们可以直接用 += 赋值?
    QStringList类型可以还是好理解,它重载了+=操作符,难道因为ArgumentList类型是继承自QSringList类型,它就也
可以这样用 += 赋值了?
离线noidea

只看该作者 1楼 发表于: 2014-05-19
QStringList 的operator+= 继承于QList,它的属性是public的,所以你的ArgumentList的Operator+=也继承了该重载。

参考文档:
http://qt-project.org/doc/qt-5/QStringList.html#adding-strings
talk in code
Qt5.2.1 + MacOSX10.9
离线realfan

只看该作者 2楼 发表于: 2014-05-19
QList<T> &    operator+=(const QList<T> & other)
QList<T> &    operator+=(const T & value)

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

只看该作者 3楼 发表于: 2014-05-19
谢谢二位的回答,这里的 += 确实是QList重载的,开始疑惑在*this是ArgumentList类型的,觉得会类型不匹配。
快速回复
限100 字节
 
上一个 下一个