• 5635阅读
  • 9回复

QT中看到这样的编码风格(可能属于C++范畴) [复制链接]

上一主题 下一主题
离线cznc
 
只看楼主 正序阅读 楼主  发表于: 2009-08-10
QT中看到这样的编码风格:
1,
void MyTree::index(){
.......
return QModelIndex();//?
}
问题:是否 相当于 :return new QModelIndex();

2,
QDirModel *model = new QDirModel;//?
问题:是否相当于 :QDirModel *model = new QDirModel();

3,
QDeptDAO *dao;
dao->getDepartments(&list);//?
问题:dao是一个指针,没有实例化居然能直接使用??(代码运行完全正常实在奇怪得很);

ps:本人java转c++,经验不足;上述问题可能算不上技术问题,勿论发在Qt论坛贻笑大方;不过作为技术人员对这些细枝末节的事情容易牵肠挂肚,可能大家深有同感;故望热心人解惑为盼。

离线xxf_cz
只看该作者 9楼 发表于: 2009-08-12
3,
QDeptDAO *dao;
dao->getDepartments(&list);


如果方法 QDeptDAO::getDepartments() 中没有访问到此类的数据成员,则运行正常且不会出错的。
说“运行正常”,是因为编译时变量 dao已经和 类QDeptDAO的成员方法入口进行了有效的绑定,所以方法调用能够成功执行;
说“不会出错”,是因为此方法中的代码并没有使用到此类的数据成员,因而不会导致内存访问违例。

从另一个角度来看,运行时,getDepartments() 表现为一个静态方法成员;虽然它编译时是作为普通(实例)方法成员。
离线cznc
只看该作者 8楼 发表于: 2009-08-12
谢谢 shrek_mycpp(我有个很好的同事也叫shrek^_^)

另外:
3,
QDeptDAO *dao;
dao->getDepartments(&list);//?
问题:dao是一个指针,没有实例化居然能直接使用??(代码运行完全正常实在奇怪得很);

“自动实例化”; 不过很奇怪;难倒“自动实例化”很新?
离线shrek_mycpp
只看该作者 7楼 发表于: 2009-08-11
这个是C++语法问题。
当QModelIndex有一个没有参数的构造函数时, new QModelIndex 和 new QModelIndex()是一个意思。
离线cznc
只看该作者 6楼 发表于: 2009-08-10
引用第1楼wvins于2009-08-10 09:53发表的  :
1. return QModelIndex();返回的是这个对象,也就是QModelIndex,
  return new QModelIndex;返回的是QModelIndex *
2. C++的创建对象指针的语法是new QModelIndex,但是new QModelIndex()似乎也行的通
.......

第一条 我明白了;诚如wvins所言;谢谢;
第二条是否没本质区别、仅仅当构造函数没有参数时候的括号省略而已?
离线cznc
只看该作者 5楼 发表于: 2009-08-10
QDeptDAO *dao;
dao->getDepartments(&list);//?

这两行是挨着写的,简直要颠覆俺的oo观....
离线cznc
只看该作者 4楼 发表于: 2009-08-10
void MyTree::index(){
.......
return QModelIndex();//?
}
返回类型系笔误;更正:

QModelIndex MyTree::index(){
.......
return QModelIndex();//?
}//实在不好意思...
离线foxyz

只看该作者 3楼 发表于: 2009-08-10
void MyTree::index(){
.......
return QModelIndex();//?
}

同上,void的你return 一个object, 这compiler太强了
离线jorneyr

只看该作者 2楼 发表于: 2009-08-10
QT中看到这样的编码风格:
1,
void MyTree::index(){
.......
return QModelIndex();//?
}
问题:是否 相当于 :return new QModelIndex();
简直是胡扯, void类型的函数, 你返回一个值, 能编译通过才怪.

2,
QDirModel *model = new QDirModel;//?
问题:是否相当于 :QDirModel *model = new QDirModel();
这个完全相等.

3,
QDeptDAO *dao;
dao->getDepartments(&list);//?
问题:dao是一个指针,没有实例化居然能直接使用??(代码运行完全正常实在奇怪得很);
这个要持上下文, 也许dao在外部已经定义过了. 记住, 指针一定要指向有效内存才能使用, 否则当程序运行到此指针出, 马上异常退出.
离线wvins
只看该作者 1楼 发表于: 2009-08-10
1. return QModelIndex();返回的是这个对象,也就是QModelIndex,
  return new QModelIndex;返回的是QModelIndex *

2. C++的创建对象指针的语法是new QModelIndex,但是new QModelIndex()似乎也行的通

3. getDepartments是静态方法?
  不推荐这么使用,造成误解。
快速回复
限100 字节
 
上一个 下一个