什么是QT
Qt 是一个跨平台的 C++图形用户界面应用程序框架。
它为应用程序开发者提供建立艺术级图形界面所需的所有功能。
它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
QT的优点
跨平台,几乎支持所有的平台
接口简单,容易上手,学习 QT 框架对学习其他框架有参考意义。一定程度上简化了内存回收机制
开发效率高,能够快速的构建应用程序。
有很好的社区氛图,市场份额在缓慢上升。
可以进行嵌入式开发。
C++
C++是C语言的拓充,C++包含C的所有属性,C语言的语法在C++中都合法
C编程思想:面向过程(强调执行过程)
C++编程思想:面向对象(半面向过程,半面向对象)
C++中一切皆对象
C++中类的三大属性:封装,继承,多态
C++对C的兼容
c语言文件:XXX.c 编译c文件:gcc XXX.c -o
C++文件:XXX.cpp 编译C++文件:g++ XXX.cpp -o
c语言头文件: eg #include
C++头文件: eg #include
C++的输入输出
cout(输出类的类对象 )
cout具有输出功能,能够自动识别数据类型,不需要加格式符(%s,%d等)。
<<:插入符(输出符)
endl:换行(\n)
cin(输入类的类对象 )
>>:提取符(输入符)
数据类型
C++的数据类型:基本数据类型,构造数据类型
基本数据类型:int,char,short,float,double,long,bool,string
构造数据类型:数组,指针,结构体,共用体,枚举,类
布尔类型(bool)
bool:true==1,false==0
boolalpha(类型)
C++中的字符串string
C语言中存储字符串,使用字符数组或者字符指针指向。
C++依然可以使用字符数组存储字符串,除此之外可以使用string存储字符串。
字符串的赋值和初始化
string str1;string str2 = "hello"; //初始化cout << "str2 = " << str2 << endl;string str3 = str2; //初始化cout << "str3 = " << str3 << endl;string str4(str3); //等价于 string str4 = str3; 拷贝构造函数cout << "str4 = " << str4 << endl;string str5(str2,3); //从下标位3的地方开始赋值string str6(8,'m'); //赋值8个mcout << "str6 = " << str6 << endl;char *p = (char *)"hello"; //C++中又字符串类型变量所以不能直接用char*来指向字符串,需要强转
C++字符串的比较
由于C++中有字符串类型的变量,所以字符串之间的比较,就和基本数据类型之间比较由于,借助于关系运算符直接比较即可。
string name = "admin", password = "111";string username,userpassword;cout << "请输入账号密码:" << endl;cin >> username >> userpassword;if(username == name && userpassword == password){cout << "登录成功!" << endl;}else{cout << "登录失败!" << endl;}
字符串中常用的函数
size():字符串的大小,元素个数
empty():判空,如果字符串为空,返回true,否则返回false
capacity():容量的大小,容量的大小>= 元素个数
C++字符串和C语言字符串的风格互换
C语言的字符串可以直接转换成C++风格的字符串
C++风格的字符串不能直接转换成C风格的字符串,需要使用c_str()进行转换
字符串的元素访问
[] 小标访问元素 ---->不判断是否越界
at() 访问元素 ---->判断是否越界
string str2 = "abc";cout << str2[2] << endl;cout << str2[6] << endl;cout << str2.at(2) << endl;cout << str2.at(6) << endl;
字符串的输入
C++的字符串的输入默认以空格结束
getline(cin,str);//吸收空格
string name;getline(cin,name);cout << name << endl;
数组array
C++中的数组可以使用array这个容器完成,需要包含头文件#inlude
//定义一个数组array<int,5> a;//int a[5]//::--->作用域限定符,iterator--->迭代器==指针array<int,5> ::iterator iter;//begin():第一个元素的地址//end():最后一个元素的下一个元素的地址for(iter = a.begin();iter != a.end();iter++){cin >> *iter;}for(iter = a.begin();iter != a.end();iter++){cout << *iter <<endl;}
命名空间
多人协同开发,避免命名污染
命名空间相当于给名字加个姓氏
std命名空间的使用
#include <iostream>
#include<iomanip>
#include<string.h>
#include<array>
//iostream:标准输入输出流//使用命名空间的方式3:
using namespace std;
//using:使用命名空间的关键字
//namespace:命名空间的关键字
//std:标注的命名空间//使用命名空间的方式2:声明使用命名空间中的某个名字,后期都可以直接使用,其他名字依旧要加上命名空间名和作用域限定符
using std::cout;int main()
{//使用命名空间的方式1:使用某个名字,将命名空间和作用域限定符加上std::cout << "hello world!" << std::endl;//使用命名空间的方式2:cout << "hello world!" << std::endl;//使用命名空间的方式3:cout << "hello world!" << std::endl;return 0;
}
自定义命名空间
格式:
namespace 命名空间名(一般首字母)
{数据类型 变量1;数据类型 变量2;数据类型 变量3;。。。数据类型 变量n;
}
#include <iostream>using namespace std;//自定义命名空间
namespace Zhangsan
{int cuihua;namespace Xiaosan //自定的命名空间可嵌套{int cuihua; //一级一级的找}
}
namespace Zhangsan //可以在同一个作用域下,定义相同的命名空间名 相当于合并
{//int cuihua;重复定义int a;int b;
}namespace Lisi
{int cuihua;namespace Xiaosan //自定的命名空间可嵌套{int cuihua; //一级一级的找}
}using Zhangsan::cuihua;int main()
{
// Zhangsan::cuihua = 19;
// Lisi::cuihua = 39;cuihua = 19;Zhangsan::Xiaosan::cuihua = 78;return 0;
}
练习
提示并输入一个字符串,统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数
要求使用C++风格字符串完成
#include <iostream>
#include<iomanip>
#include<string.h>
#include<array>using namespace std;int main()
{cout << "请输入一个字符串" << endl;string a;getline(cin,a);int len = a.size();int caps = 0,small = 0,count = 0,space = 0,other = 0;for(int i= 0;i<len;i++){if(a[i] >= 'A' && a[i] <= 'Z'){caps++;}else if(a[i] >= 'a' && a[i] <= 'z'){small++;}else if(a[i] >= '0' && a[i] <= '9'){count++;}else if(a[i] == ' '){space++;}else{other++;}}cout << "大写字符:" << caps << endl;cout << "小写字符:" << small << endl;cout << "数字:" << count << endl;cout << "空格:" << space << endl;cout << "其他字符:" << other << endl;return 0;
}