- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 C++11中类数据成员初始化方法详解
C++98为类中提供类成员的初始化列表。类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类里面的任何成员变量在定义时是不能初始化的。 2.一般的数据成员可以在构造函数中初始化。 3.const数据成员必须在构造函数的初始化列表中初始化。 4.static要在类的定义外面初始化。
2016-12-31 21:28:38 7058 2
原创 关于C++域作用符详解
c++里的范围有以下几种,全局作用域,名空间作用域,类作用域。编译器在编译时,默认从同级别的范围内开始解析符号,采用由内而外的顺序进行解析函数名。::被称为作用域解析符,用于引入一个作用域。::bind表示使用的是全局名空间内的bind函数。在c++里引入了名空间(namespace)的概念,比如std::cout就表示std名空间内的cout对象。1. ::域作用符,用来引用全局的变量、
2016-12-31 14:53:14 2529
转载 Qt 内存管理与布局管理器
一、new与delete 在C++学习中,new与delete必须成对使用,防止内存泄漏,可是在学习Qt时,我发现很多new,而却几乎找不到delete。在网上搜索得知:Qt完善了C++的内存管理机制,“如果指针对象有父对象,那么父对象在被释放时,会自动释放子对象”。所以我在练习时,创建的控件都传递了this指针,作为其父对象。但是,当我在练习布局管理器的时候,却出了问题。二
2016-12-30 08:56:54 779
转载 C++模板:函数模板和模板函数详解
1.函数模板的声明和模板函数的生成1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){ 函数体}其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或clas
2016-12-28 09:48:49 607
转载 QT信号和槽以结构体为参数传递复杂数据
QT 的信号和槽机制能十分方便的用来传输数据,但是如果数据种类比较多,分类比较多的时候,就需要更好地更高效的来传递数据的方法。以结构体作为参数是个很不错的选择。这几天写的程序正好需要以结构体来作为参数,但是网上搜的资料很少,讲的也不详细,我解决了问题后整理了一下,希望给有同样需求的同学一点帮助Q_DECLARE_METATYPE与qRegisterMetaTypeqRegist
2016-12-20 19:37:57 7466 1
转载 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
一、编码历史与区别 一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let'sGo! 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。
2016-12-20 15:16:28 705
原创 C++ 多继承构造函数初始化列表调用顺序
class B1 {public: B1(int i) {cout"consB1" };//定义基类B1 class B2 {public: B2(int j) {cout"consB2" };//定义基类B2 class B3 { public: B3() {cout"consB3 *"
2016-12-20 10:43:04 4808 2
转载 关于Qt的事件循环以及状态机事件循环的思考
1.一般我们的事件循环都是由exec()来开启的,例如下面的例子:1 QCoreApplicaton::exec()2 QApplication::exec()3 QDialog::exec()4 QThread::exec()5 QDrag::exec()6 QMenu::exec() 这些都开启了事件循环,事件循环首先是一个无限“循环”,程序在exec()里面无限循
2016-12-18 13:41:16 2566
转载 Qt之Ui名字空间以及setupUi函数的原理和实现详解
用最新的QtCreator选择GUI的应用会产生含有如下文件的工程 下面就简单分析下各部分的功能。 .pro文件是供qmake使用的文件,不是本文的重点【不过其实也很简单的】,在此不多赘述。所以呢,还是从main开始,[cpp] view plain copy #include #include "mainwindow.h"
2016-12-17 19:44:54 808
转载 Qt窗体之间相互传值的三种方式
1.使用QT中的Signal&Slot机制进行传值我在mainwindow里面添加了一个textedit用来接收传递过来的值,dialog里面添加了一个ok按钮和一个lineedit,可以在lineedit里面输入信息点击ok按钮时传递到主窗口。dialog.h如下:#ifndef DIALOG_H#define DIALOG_H#include namespace Ui {
2016-12-16 23:03:57 15577 4
转载 Qt之信号signals和槽slots详解
目录(?)[-]一概述 二信号 四信号和槽的关联 五元对象工具 六程式样例 七应注意的问题 8信号和槽也不能携带模板类参数 9嵌套的类不能位于信号或槽区域内也不能有信号或槽 10友元声明不能位于信号或槽声明区内相反他们应该在普通C的privateprotected或public区内进行声明下面的例子是不合语法规范的
2016-12-16 16:02:30 46397 1
转载 C++之explicit详解
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性
2016-12-15 10:55:16 640
转载 Qt之Q_OBJECT详解
信号和槽是Qt应用开发的基础,它可是将两个毫无关系的对象连接在一起,槽和普通的C++函数是一样的,只是当它和信号连接在一起后,当发送信号的时候,槽会自动被调用只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。 所有QObject的派生类在官方文档中都推荐在头文件中放置宏Q_OBJECT,那么该宏到底为我们做了哪些工作?在qobjectdef.h中有下面
2016-12-15 10:11:35 11083 1
原创 C++ namespace详解
关于C++ namespace,我们需要回答如下几个问题:1、什么是namespace?2、为什么有namespace?也就是namespace的作用3、namespace的使用方法有哪些?(一)什么是namespace? 首先我们看看C++标准规范中对namespace的定义如下: named-namespace-definitio
2016-12-14 19:40:29 8359 1
转载 CMake 入门实战
从实例入手,讲解 CMake 的常见用法。Contents什么是 CMake入门案例:单个源文件多个源文件自定义编译选项安装和测试支持 gdb添加环境检查添加版本号生成安装包将其他平台的项目迁移到 CMake相关链接类似工具什么是 CMakeAll problems in computer science can be solved by another
2016-12-14 14:54:05 424
转载 CTest
一、初识CTest CTest是CMake集成的一个测试工具,在使用CMakeLists.txt文件编译工程的时候,CTest会自动configure、build、test和展现测试结果 CTest有两个模式:模式一: 使用CMake configure 和 build工程,在CMakeLists.txt文件中,使用特殊的命令取创建tests。CTest用来
2016-12-14 14:50:00 7510 2
转载 开源库
这篇文章主要用来记录我见过的开源库,只记录最突出特点,方便以后用时查询。1. 3D图形引擎 openGL,事实上的图形学工业标准,提供图形学底层接口,直接使用openGL,对编程有较高要求。 openInventor , 对openGL简单地进行了封装,连添加节点地步骤也和openGL相似,不过是由类来操作,更直观一些。目前已经很少人用。 OSG
2016-12-14 11:08:14 945
原创 C++之构造函数(三) 多重继承构造函数初始化
#includeusing namespace std;class human{public:human(int);virtual ~human(){coutvirtual int walk(){return itwalk;}virtual void setwalk(int w){itwalk=w;}private:int itwalk;};huma
2016-12-13 19:35:30 1401 1
原创 C++之构造函数(二) 构造函数初始化
一、我的问题是关于初始化C++类成员的。我见过许多这样的代码: CSomeClass::CSomeClass() { x=0; y=1; } 而在别的什么地方则写成下面的样子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的一些程序员朋友说第二种方法比较好,但他们都不知道为什么是这样。你能告诉我这两种
2016-12-13 10:31:29 544
原创 C++之构造函数(一)
构造函数是类的一个特殊的成员函数,它与类名同名。当定义该类的对象时,构造函数将被系统自动调用用以实现对该对象的初始化。构造函数不能有返回值,因而不能指定包括void在内的任何返回值类型。构造函数的定义域其他函数的定义一样,可以放在类内或类外。 与构造函数相对应的是析构函数,当撤销类对象时,析构函数回收存储空间,并做一些善后工作。构造函数与析构函数都属于类,可以由用户提供,也可以由
2016-12-13 09:34:46 426
转载 C++中 #ifdef 和#endif的作用
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过(一般
2016-12-12 20:46:29 816 1
转载 浅谈 qmake 之 shadow build
shadow buildshadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁。这不是qmake独创的东西,cmake中早就使用这个东西了 cmakeqmake备注in-sourcecmake .
2016-12-11 18:54:58 577
转载 将Qt Creator导入Cmake项目
既然已经习惯了Qt Creator,索性将它作为通用IDE,另外还需要选择一个通用的make系统,当然这就是Qt Creator默认也支持的CMake。使用CMake作为构建系统,需要自己写CMakeLists.txt,相当于qmake下的pro,只不过更加与平台以及编译器无关。先来个最简单的CMakeLists.txt:[c-sharp] view plain cop
2016-12-11 18:22:18 12986
转载 用 cmake 构建Qt工程(对比qmake进行学习)
cmake vs qmakeqmake 是为 Qt 量身打造的,使用起来非常方便cmake 使用上不如qmake简单直接,但复杂换来的是强大的功能内置的 out-of source 构建。(目前QtCreator为qmake也默认启用了该功能。参考:浅谈 qmake 之 shadow build)为各种平台和场景提供条件编译可处理多个可执行文件情况,和很好配合 QtTe
2016-12-11 17:29:55 13618 1
转载 Linux C工程管理 之autoconf与automake
一、autoconf autoconf是一个用于生成可以自动的配置软件源代码包以适应多种UNIX系统的shell脚本的工具。由autoconf生成的配置脚本在运行时与autoconf是无关的,也就是说,配置脚本的用户并不需要拥有autoconf。由autoconf生成的这些脚本通常被命名为configure,它们检查当前系统是否满足软件正常运行所需要的特征,并根据检查得到的信息生成Ma
2016-12-11 12:26:34 868
原创 关于Qt::WindowFlags枚举类型的全面解析
在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: 1 QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *parent=0这段代码容易理解,是指父窗口部件的指定。 Qt::WindowFlags f=0这代码就有一些让人不解了,其实它是指定控件的窗口标识的。值为0即Qt::Widg
2016-12-07 15:20:48 8885 1
原创 关于extern和static关键字的全面总结
(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错误可能在两个地方产生:一个,编译时的错误,这个主要是语法错误;一个,链接时的错误,主要是重复定义变量等。
2016-12-06 15:20:07 651
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人