Qt 是一个跨平台的 C++图形用户界面应用程序框架。
它为应用程序开发者提供建立艺术级图形界面所需的所有功能。
它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
跨平台,几乎支持所有的平台
接口简单,容易上手,学习 QT 框架对学习其他框架有参考意义。一定程度上简化了内存回收机制
开发效率高,能够快速的构建应用程序。
有很好的社区氛图,市场份额在缓慢上升。
可以进行嵌入式开发。
C++就是C的扩充, C++包含C的所有属性,换句话说,C程序在C++中合法。
C++编程思想:面向对象编程。 C语言:面向过程编程
面向对象编程:可以说一切皆对象
面向对象编程的三大特性(C++的大三属性):封装、继承、多态
cout 输出类的对象,用来输出的,它可以自动识别类型,所以不需要加格式符。
<< 插入符 (输出符号)
endl 换行 == ‘\n’
#include
//#预处理
//include 包含 相应的头文件
//iostream 输入输出流 i--input o--out
using namespace std;
//using :使用命名空间的关键字
//namespace :命名空间的关键字
//std:标准的命名空间
//程序入口
int main()
{ //程序的开始
cout << "Hello World!" << endl;
cout << "今天是学习C++的第一天," << "知道吗" << endl;
return 0;
} //程序的结束
cin 输入类的对象, 用来输入的,给变量初始化,
它可以自动识别数据类型,所以不需要加格式符,不需要加&
>> 提取符(输入符)
#include
using namespace std;
int main()
{
cout << "请输入你的年纪:" << endl;
int age;
cin >> age;
cout << "age = " << age;
return 0;
}
基本数据类型:char 、short、int 、long、float、double、bool、string
构造数据类型:数组、指针、结构体、共用体、枚举、类
#include
#include
using namespace std;
int main()
{
//整型 进制的问题 有无前缀
//二进制 0b
//八进制 0
//十进制 无
//十六进制 0x
int b = 100, b2 = 0b100, b3 = 0100, b4 = 0x100;
cout << "b = " << b << endl; //结果100
cout << "b = " << dec << b << endl; //dec是以10进制方式 100
cout << "b = " << oct << b << endl; //oct是以8进制
cout << "b = " << hex << b << endl; //hex是以16进制
cout << "b = " << b << endl; //如果改变了输出进制规则,则后面都以这种方式输出
cout << "b = " << dec << b << endl;
//浮点型
double d1 = 12.3456789, d2 = 1.23456789;
cout << "d1 = " << d1 << endl; //保留有效数字6位,存在四舍五入
//如果自己想保留有效数字几位,需要用到一个方法 其头文件
cout << setprecision(4) << d1 << endl;
//保留小数点后几位
cout << setprecision(4) << fixed << d1 << endl;
//bool类型 true == 1 false == 0
bool t = true, t2 = false;
cout << t << endl;
cout << boolalpha << t << endl;
cout << t2 << endl;
//bool可以参与运算
cout << t+t2 << endl;
return 0;
}
#include
using namespace std;
int main()
{
string str1; // int a
string str2 = "abcdef"; //初始化
cout << "str2 = " << str2 << endl;
string str3 = str2; //把str2初始化str3
cout << "str3 = " << str3 << endl;
string str4(str3); // ==> string str4 = str3; 调用有参构造函数
cout << "str4 = " << str4 << endl;
string str5(str2,3); //把str2下标为3地方开始给str5初始化
cout << "str5 = " << str5 << endl;
str1 = str5; //赋值
string str6(6, 'm');
cout << "str6 = " << str6 << endl;
return 0;
}
size() 大小—元素的个数
empty() 判断是否为空
capacity() 容量大小
if(!str6.empty())
{
cout << str6.size() << endl;
cout << str6.capacity() << endl;
}
c语言风格的字符串可以直接转换成c++字符串
c++字符串不可以直接转换成c风格的字符串
string str;
char a[20] = "hello kitty";
str = a;
cout << str << endl;
string strr = "hello world";
//a = strr;
//strcpy(a, strr);
strcpy(a, strr.c_str()); //把C++中的字符串转换成c
cout << a << endl; //hello world
下标 —不判断是否越界
at() —判断是否越界
#include
using namespace std;
int main()
{
string str = "hello";
cout << str[4] << endl;
cout << str[8] << endl;
cout << str.at(4) << endl;
cout << str.at(8) << endl;
return 0;
}
由于c++有这种数据类型的变量,所以可以像其他基本数据类型一样用关系运算符比较。
string str1 = "ab";
string str2 = "ABCDEFGTTTTT";
if(str1 != str2)
{
if(str1 > str2)
cout << "str1 > str2" << endl;
else
cout << "str1 < str2" << endl;
}
else
cout << "sr1 == str2" << endl;
#include
using namespace std;
int main()
{
string str;
cin >> str; //cin以空格作为结束
cout << "str = " << str << endl;
//如果想包含空格 getline
getline(cin, str);
cout << "str = " << str << endl;
return 0;
}
#include
#include //包含数组的头文件 容器
using namespace std;
int main()
{
// array a; // == int a[5] 容器
// array::iterator iter; //迭代器 ==指针
// //a.begin()第一个元素的地址
// //a.end()最后一个元素的下一个地址
// for(iter = a.begin(); iter != a.end(); iter++)
// cin >> *iter;
// for(iter = a.begin(); iter != a.end(); iter++)
// cout << *iter << " ";
// cout << endl;
array< array<int, 2> , 3> a;
array< array<int, 2> , 3>::iterator iter1;
array<int, 2>::iterator iter2;
for(iter1 = a.begin(); iter1 != a.end(); iter1++)
{
for(iter2 = (*iter1).begin(); iter2 != (*iter1).end(); iter2++)
cin >> *iter2;
}
for(iter1 = a.begin(); iter1 != a.end(); iter1++)
{
for(iter2 = (*iter1).begin(); iter2 != (*iter1).end(); iter2++)
cout << *iter2 << " ";
cout << endl;
}
return 0;
}
多人协同合作时,可能会出现命名污染(命名冲突)
命名空间就相当于给一个取个姓氏(尼古拉斯·赵四)
#include
//方法3,直接将整个命名空间拿过来,后面的程序就可以不需要加命名空间名以及限定符
//using namespace std;
using std::cout;
int main()
{
//方法1:写上命名空间名字以及作用域限定符
//std::cout << "Hello World!" << std::endl;
//方法2:使用命名空间里的某个名字,则后面程序中就不需要加命名空间名以及限定符,
//但是没有表明的名字,则还要循序方法1
cout << "Hello World!" << std::endl;
cout << "...." << std::endl;
return 0;
}
格式:
namespace 命名空间名
{
数据类型 名字1;
数据类型 名字2;
数据类型 名字3;
。。。。
数据类型 名字n;
}
#include
using namespace std;
namespace Zhangsan
{
int cuihua;
int age;
}
namespace Lisi //可以嵌套
{
int cuihua;
int age;
namespace xiaosan
{
int age; //作用域不同 可以一级一级找
}
}
namespace Zhangsan //可以在同一个作用域下定义相同的命名空间
{
int b;
//int age //但是要注意,合并,就不能有相同类型的变量名
}
using Zhangsan::age; //方法2
int main()
{
Zhangsan::cuihua = 19;
age = 56;
Lisi::xiaosan::age = 23;
return 0;
}
#include
using namespace std;
int main()
{
cout << "请输入一串字符,以回车结束:" << endl;
string s;
int da, xiao, nums, spa, oth;
da = xiao = nums = spa = oth = 0;
getline(cin, s);
for(unsigned int i = 0; i < s.size(); i++){
//判断大写字母
if(s.at(i) >= 'A' && s.at(i) <= 'Z')
da++;
//判断小写字母
else if(s.at(i) >= 'a' && s.at(i) <= 'z')
xiao++;
//判断数字
else if(s.at(i) >= '0' && s.at(i) <= '9')
nums++;
//判断空格
else if(s.at(i) == ' ')
spa++;
//判断其他字符
else
oth++;
}
cout << "大写字母个数 : " << da << endl;
cout << "小写字母个数 : " << xiao << endl;
cout << "数字个数 : " << nums << endl;
cout << "空格个数 : " << spa << endl;
cout << "其他字符个数 : " << oth << endl;
return 0;
}