关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明
2015-03-04 17:32
981 查看
一、explicit关键字
1. explicit是C++中的关键字,不是C语言中的,英文直译是“明确的”、“显式的”意思。
2.
出现这个关键字的原因,是在C++中有这样规定的基础上: 当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换。作用主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。
3.
使用QT Creator默认生成代码中的类中构造函数前面就会出现此关键字。explicit关键字只用在类内部的声明中。在外部的实现部分不需要使用。
4.一般界面类、线程类的构造函数都加上此关键字。
详细参考http://blog.csdn.net/e3399/article/details/7610430
二、QT构造函数中*parent
转自:http://blog.sina.com.cn/s/blog_6340cd9c0100rabk.html
文章仅仅是用来说明一下一个参数的作用
程序写的多了,你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的(定义新的类是通常首先初始化为0,在类的实现函数中赋值)。很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题。于是,稍微偷懒一下,就会不自觉的忽略了这个参数。那么,这个参数 到底是干什么用的呢?
有了此参数,子类才会继承父类在构造函数中初始化了的数据,否则,父类的初始化数据的构造函数不执行,无法继承数据,如果吧数据定为私有的,又不便于类的通用继承。
其实,这个参数有很多用处。就像它的名字一样,这个参数指定了组件的父组件。对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任 务栏上一般是没有对话框的位置的。怎么指定这个对话框不是顶层容器呢?有父组件的组件不就不是顶层容器了吗?因此,只要你指定对话框的parent属性, 任务栏就不会出现它的身影。当然,如果你不指定,这个对话框就成为顶层容器了,任务栏会给它留个位置的——利用这个特性,就可以实现特殊对话框可以在任务 栏出现的效果,比如“关于”对话框的出现。
另外比较通用,也是很重要的作用是,parent参数指明了组件的父组件,这样,当父组件delete时,Qt可以保证所有子组件——也就是 parent指针指向这个组件的所有组件——都会被正确的delete掉。这是Qt能够帮助我们管理一部分内存的原因所在。Qt是通过遍历parent属 性来防止了这一部分内存泄漏的。因此,必要情况下还是不要忘记设置这个parent属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收 内存——因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了自动关掉
你的程序的:-)
1. explicit是C++中的关键字,不是C语言中的,英文直译是“明确的”、“显式的”意思。
2.
出现这个关键字的原因,是在C++中有这样规定的基础上: 当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换。作用主要是用来修饰类的构造函数,表明该构造函数是显式的,禁止单参数构造函数的隐式转换。
3.
使用QT Creator默认生成代码中的类中构造函数前面就会出现此关键字。explicit关键字只用在类内部的声明中。在外部的实现部分不需要使用。
4.一般界面类、线程类的构造函数都加上此关键字。
详细参考http://blog.csdn.net/e3399/article/details/7610430
二、QT构造函数中*parent
转自:http://blog.sina.com.cn/s/blog_6340cd9c0100rabk.html
文章仅仅是用来说明一下一个参数的作用
程序写的多了,你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的(定义新的类是通常首先初始化为0,在类的实现函数中赋值)。很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题。于是,稍微偷懒一下,就会不自觉的忽略了这个参数。那么,这个参数 到底是干什么用的呢?
有了此参数,子类才会继承父类在构造函数中初始化了的数据,否则,父类的初始化数据的构造函数不执行,无法继承数据,如果吧数据定为私有的,又不便于类的通用继承。
其实,这个参数有很多用处。就像它的名字一样,这个参数指定了组件的父组件。对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任 务栏上一般是没有对话框的位置的。怎么指定这个对话框不是顶层容器呢?有父组件的组件不就不是顶层容器了吗?因此,只要你指定对话框的parent属性, 任务栏就不会出现它的身影。当然,如果你不指定,这个对话框就成为顶层容器了,任务栏会给它留个位置的——利用这个特性,就可以实现特殊对话框可以在任务 栏出现的效果,比如“关于”对话框的出现。
另外比较通用,也是很重要的作用是,parent参数指明了组件的父组件,这样,当父组件delete时,Qt可以保证所有子组件——也就是 parent指针指向这个组件的所有组件——都会被正确的delete掉。这是Qt能够帮助我们管理一部分内存的原因所在。Qt是通过遍历parent属 性来防止了这一部分内存泄漏的。因此,必要情况下还是不要忘记设置这个parent属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收 内存——因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了自动关掉
你的程序的:-)
相关文章推荐
- 从Qt谈到C++(一):关键字explicit与构造函数
- C++当中构造函数前面添加explicit关键字的作用
- c++中关键字explicit用于类的构造函数
- Qt C++中的关键字explicit
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
- C++基础---构造函数与关键字explicit
- (原创)关于构造函数及参数执行顺序说明(c#)
- C++ explicit关键字应用于构造函数
- C++修饰构造函数的explicit关键字
- 关于C++的 explicit关键字
- C++三种构造函数以及explicit和friend关键字
- 关于c++的explicit关键字(有空译成中文)
- 关于QT,C++,MySQL之间中文乱码问题的简单解决
- 关于C++中构造函数的说明
- C++问题小结--3.构造函数与析构函数关于其自身特点的简单代码陈述
- C++中的转换函数、explicit关键字与non-explicit-one-argument构造函数
- C++ 构造函数放置默认转换explicit关键字(2)
- C++构造函数 explicit关键字不起作用的一次小坑记录
- C++中构造函数、参数列表、析构函数、拷贝构造函数、动态分配的数组变量的删除的简单例子
- C++ 中的关键字-------explicit 修饰构造函数