《Qt从入门到放弃》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
YanlzFramework_Qt_V01_1.0 |
严立钻 |
|
2019.09.15 |
|
|
|
|
|
|
++++“Qt从入门到放弃”:是对“C++C铸就生存利器”的综合探索;;
++++“Qt从入门到放弃”:定位在一个科普类知识,!
#第一篇:钻哥百科
#第二篇:Qt的自由探索篇
#第三篇:Qt入门篇
#第四篇:Qt放弃篇
#第五篇:立钻哥哥带您Qt框架编程
#第一篇:钻哥百科 |
++++A.1、C++编程
++++A.2、Qt框架
++++A.3、立钻哥哥带您从C++到Qt框架编程
++A.1、C++编程 |
++++A.1.1、namespace
++++A.1.2、C++风格的HelloWorld
++++A.1.3、C++新增高级特性
++++A.1.4、函数overload重载
++++A.1.5、在C++中调用C的库函数
++++A.1.6、类和面向对象
++++A.1.7、立钻哥哥带您了解C++编程
++C++实战傻瓜第一步 ++++1、使用new和delete进行动态内存分配和释放; ++++2、使用inline内敛函数替代宏调用; ++++3、使用函数重载; ++++4、使用引用(Reference)代替指针进行参数传递; ++++5、使用缺省参数; ++++6、使用模板和BIDS; ++++立钻哥哥:C++是在C语言基础上开发出来的;C++不仅完全兼容C的语法,而且它的底层实现和C语言也是一致的;例如:局部/静态/全局变量的存储区、动态内存的分配、函数调用规范、目标文件格式、链接规范等等;C++可以直接调用C语言编写的库函数; |
++A.1.1、namespace |
++A.1.1、namespace
++++立钻哥哥:namespace命名空间(是指标识符的各种可见范围);
++++C++标准库中的所有标识符都被定义于一个名为std的namespace中;
namespace ylzFrameworkQt{ int ylzScore; } |
++++pthread库的函数名都以pthread_开头,pthread_create、pthread_exit等;
++++pthread库中与mutex相关的函数名和类型名都以pthread_mutex_开头,pthread_mutex_int、pthread_mutex_lock等;
++++这样命名的好处是保证了名字是全局唯一的,不会和其他库中的函数或类型命名冲突;
++++所以以pthread_开头的名称构成一个命名空间,以pthread_mutex_开头的名称构成一个子命名空间;
++++一个命名空间中可以定义变量名、类型名、函数名等等;
++A.1.2、C++风格的HelloWorld |
++A.1.2、C++风格的HelloWorld
++++立钻哥哥:通过一个C++风格的HelloWorld来熟悉C++编程语言啦;
++main_ylz_1.cpp //iostream是C++标准库中的头文件,按照C++库的惯例,头文件的文件名通常没有.h; #include <iostream>
int main() { //iostream中声明了std::cout和std::endl等变量; std::cout << “立钻哥哥:Hello World!” << std::endl; return 0; } ++++[std:cout]:表示输出到标准输出; ++++[std:endl]:表示换行; ++++[<<]:本来是移位运算符,这里overload成了输出函数;把要打印的内容一项一项用“<<”连接到“std::cout”后面即可; ++++相当于C程序中的:printf(“立钻哥哥:Hello World!\n”);
|
++main_ylz_2.cpp #include <iostream> //用using namespace std; 声明之后,cout和endl前面的std::就可以省略不写了; using namesapce std;
int main() { cout << “立钻哥哥:Hello Yanlizuan!” << endl; return 0; } ++++虽然std::可以省略不写,但是cout变量的全面仍然是std::cout,如果有一个全局变量叫做cout,它和std::cout应该是两个不同的变量,在声明了“using namespace std; ”的情况下,为了和std::count区别开,全局变量的cout可以写作 ::cout; ++++类似于pthread_mutex_init函数名,一个C++命名空间也可以有子命名空间,例如 a:b:c;
|
++++调试运行:$g++ main_ylz_1.cpp -o ylz $./ylz |
++A.1.3、C++新增高级特性 |
++++[重载(Overload)]:在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载;类的构造函数需要重载机制:C++规定构造函数与类同名,构造函数只能有一个名字;可用重载机制来实现,类可以有多个同名的构造函数(只能靠参数类型的不同来区分重载函数);全局变量和类的成员函数同名不算重载(因为函数的作用域不同);
++++[内联(inline)]:;
++++[const]:;
++++[virtual]:;
++++构造函数的两个执行阶段(初始化阶段和计算阶段);
++++[初始化阶段(在初始化列表中)]:所有类类型(class type)的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中;
++++[计算阶段(由构造函数的函数体中所有语句组成)]:一般用于执行构造函数体内的赋值操作;
++++对于内建类型(比如int, char, float类型),这两种方式是等价的:int i = 10; int i(10);
++++对于class类型的变量,用()的方式初始化相当于调用构造函数,可以在()中传多个参数;
----<1、一般变量(int)>:可以在初始化列表或者构造函数里初始化,不能直接初始化或者类外初始化;
----<2、静态成员变量(static int)>:必须在类外初始化;
----<3、常量(const int)>:必须在初始化列表里初始化;
----<4、静态常量(static const int)>:必须只能在定义的时候初始化;
----<1、内置数据类型,复合类型(指针,引用)>:;
----<2、用户定义类型(类类型)>:;
struct YanlzGame{ string gameName; int gameId; YanlzGame(string s, int i) : gameName(s), gameId(i){}; //立钻哥哥:初始化列表 } ++++初始化列表的成员的两种方式: ----<1>使用初始化列表; ----<2>在构造函数体内进行赋值操作; |
----<1、常量成员>:因为常量只能初始化不能赋值,所以必须放在初始化列表里面;
----<2、引用类型>:引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面;
++++new和delete运算符用于动态分配和撤销内存的运算符,要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问:
--------1.1、new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址;
--------int *a = new int; //将一个int类型的地址赋值给整型指针a;
--------1.2、int *a = new int(5); //将整数赋值为5
--------2.1、一维:int *a = new int[100]; //开辟一个大小为100的整型数组空间;
--------2.2、二维:int **a = new int[5][6];
--------3.1、int *a = new int; delete a; //释放单个int的空间;
--------3.2、int *a = new int[5]; delete[] a; //释放int数组空间;
//立钻哥哥:new和delete应用的简单例子 //new_delete_malloc_ylz_1.cpp #include <iostream> using namespace std;
int main() { int *arraySize = new int; //int *arraySize = (int*)malloc(sizeof(int)); cin >> *arraysize; //cin>>相当于scanf,从标准输入读取到变量中;
int *array = new int[*arraySize]; //int *array = (int*)malloc((*arraySize)*sizeof(int)); for(int i = 0; i < *arraySize; i++){ array[i] = i; }
for(int i = 0; i < *arraySize; i++){ cout << array[i] << “,”; } cout << endl;
delete[] array; //free(array); delete arraySize; //free(arraySize); } ++++[cin >>]:相当于scanf,从标准输入读取到变量中; |
#include <iostream> using namespace std;
void YanlzTestFunc(int x, int y, int z) { cout << x << y << z << endl; }
void YanlzTestFunc(int x = 1; int y = 2; int z = 3);
void main() { YanlzTestFunc(4, 5); //函数调用时,从左到右匹配 } |
++A.1.4、函数overload重载 |
++++在调用重载函数时,根据调用者提供的argument类型自动选择最合适的函数定义,所以各重载函数定义的parameter个数和类型必须互不相同;
++++[类的构造函数需要重载机制]:C++规定构造函数与类同名,构造函数只能有一个名字;可用重载机制来实现,类可以有多个同名的构造函数(只能靠参数类型的不同来区分重载函数);全局变量和类的成员函数同名不算重载(因为函数的作用域不同);
//立钻哥哥:函数overload重载的简单例子 //overload_ylz.cpp #include <iostream> using namespace std;
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int main() { cout << add(1, 2) << endl << add(2.13, 3.14) << endl; return 0; }
++++$g++ overload_ylz.cpp -o ylz $./ylz ++++输出结果:3 5.27 |
<返回类型说明符> operator <运算符符号>( <参数表> ) { <函数体> } |
++++Complex operator+(const Complex &a, const Complex &b);
++立钻哥哥:调用运算符重载函数与调用普通函数的不同之处在于: +A、[对于普通函数,参数出现在()内]: Complex Add(const Complex &a, const Complex &b); // c = Add(a, b); +B、[对于运算符重载函数,参数出现在其左右两侧]: Complex operator+(const Complex &a, const Complex &b); //c = a + b; |
++++cout后面的 << 运算符:C++标准库为 << 运算符定义了几个重载函数:
----A、这些函数的第一个参数都是 std::ostream& 类型(也就是cout的变量类型);
----B、第二个参数是某种内建类型,cout<< 可输出整型、字符型、浮点型、字符串等等,是分别调用不同的重载函数实现的;
//立钻哥哥:运算符overload重载简单例子; class X { public: int i; }
X operator+(const X& x1, const X& x2) { X temp; temp.i = x1.i + x2.i; }
X x1, x2, x3; x1 = x2 + x3; |
++++[C++的inline函数既具备宏代码的效率,又增加了安全性]:在调用一个内联函数时,编译器像处理普通函数一样首先做类型安全检查和自动类型转换,如果检查通过,内联函数的代码就会直接替换函数调用,就像宏展开一样;
//立钻哥哥:由于inline函数相当于宏定义,因此通常将inline函数的实现直接放在头文件中,不写声明; +A、在函数返回类型前加上inline即可指定为内联: void Foo(int x, int y); inline void Foo(int x, int y) { ... ... }
+B、仅将inline放在函数声明前面不起任何作用: inline void Foo(int x, int y); |
class A { public: void Foo(int x, int y){} //立钻哥哥:自动地成为内联函数 } |
++++不宜使用内联(内联仅仅省去了函数调用的开销):
++A.1.5、在C++中调用C的库函数 |
++++为了能被C++代码正确使用,C函数库提供的头文件都采用以下的开头和结尾:
#ifdef __cplusplus extern “C”{ #endif ... ... //立钻哥哥:头文件内容 #ifdef _cplusplus } #endif ++++说明1:【extern “C”】修饰内的函数,一律按照C的风格来编译; ++++说明2:如果该头文件被C++的调用代码包含,被C++编译器编译,__cplusplus就会有定义了,于是 extern “C”{} 可见,C++编译器对于括在 extern “C”{} 之间的函数名,在调用函数时不使用 name mangling, 以保证与C的实现代码匹配; ++++说明3:如果该文件被C的调用代码包含,被C编译器编译,__cplusplus没有定义,就是一个普通的头文件了; |
++++在C++中调用C的库函数的简单例子:
//第一:做一个C动态库 ++++$vim hello_ylz.c (立钻哥哥:vim是Linux下的一个编辑器) #include <stdio.h>
void hello_ylz() { printf(“立钻哥哥:Hello, C++!\n”); }
++++编译并copy到系统库目录下(也可以自己定义库目录: man ldconfig) ----$gcc -shared -o libhello_ylz.so hello_ylz.c (立钻哥哥:默认在Linux环境下) ----$sudo cp libhello_ylz.so /lib/ (立钻哥哥:/lib/是Linux环境中默认库目录)
|
//第二步:写一个C++程序去调用它(C函数) ++++$vim test_ylz.cpp #include <iostream>
#ifdef __cplusplus extern “C” { #endif
void hello_ylz();
#ifdef __cplusplus } #endif
int main() { hello_ylz(); return 0; }
|
//第三步:编译并运行 ++++$g++ test_ylz.cpp -o ylz -lhello_ylz ++++$.ylz |
++A.1.6、类和面向对象 |
【XR游戏开发QQ群:784477094】
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++虚拟现实VR资讯: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系统:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0传送机制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR实战之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--