c++
文章平均质量分 56
c++学习
tang05709
这个作者很懒,什么都没留下…
展开
-
c++强制类型转运算符重载
强制类型转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。重载强制类型转换运算符时,不需要指定返回值类型,因为返回值类型是确定的,就是运算符本身代表的类型。#include <iostream>using namespace std;class MyComplex{ double real; double imag;public: MyComplex(double r = 0, double i = 0) : real(r),原创 2021-09-29 10:59:05 · 894 阅读 · 0 评论 -
c++浅拷贝和深拷贝
同类对象之间可以通过赋值运算符 = 互相赋值。如果没有经过重载, = 的作用就是将赋值号左侧对象的值一一赋值给左侧对象,这相当于值的拷贝,称作"浅拷贝"。如果赋值对象中涉及指针或引用,则它们之间是相互关联的,一个值变化了,另一个值也跟着变化。因为对象中的指针指向的是同一个内存地址。重载赋值运算符后,赋值语句的功能是将一个对象中指针成员变量指向的内容复制到另一个对象中指针成员变量指向的地方,这样的拷贝称作”深拷贝“。浅拷贝示例#include <iostream>using nam原创 2021-09-29 09:47:05 · 307 阅读 · 0 评论 -
c 二叉树模拟
头文件 tree.h#ifndef _TREE_H_#define _TREE_H_#include <stdbool.h>#define SLEN 20typedef struct item{ char petname[SLEN]; char petkind[SLEN];} Item;#define MAXITEMS 10typedef struct trnode{ Item item; struct trnode* left; struct trn原创 2021-09-22 22:51:27 · 97 阅读 · 0 评论 -
c 队列模拟
头文件 queue.h#ifndef _QUEUE_H_#define _QUEUE_H_#include <stdbool.h>typedef int Item;#define MAXQUEUE 10typedef struct node{ Item item; struct node* next;} Node;typedef struct queue{ Node* front; Node* rear; int items;} Queue;/**原创 2021-09-22 21:22:38 · 113 阅读 · 0 评论 -
c 链表模拟
链表头文件 list.h#ifndef LIST_H_#define LIST_H_#include <stdbool.h>#define TSIZE 45struct film{ char title[TSIZE]; int rating;};typedef struct film Item;typedef struct node{ Item item; struct node* next;} Node;typedef Node* List;原创 2021-09-21 21:48:07 · 76 阅读 · 0 评论 -
c 十进制转二进制
void to_binary(unsigned long n){ int r; r = n % 2; if (n >= 2) { to_binary(n / 2); } putchar(r == 0 ? '0' : '1'); return;}结果:Enter an integer(q to quit):5Binary equivalent: 101Enter an integer(q to quit):分析:在二进制中,奇数的末尾一定是1,偶数的.原创 2021-09-19 19:02:20 · 470 阅读 · 0 评论 -
递归,说来简单,理解还是比较难的。
#include <stdio.h>void up_and_down(int);int main(void){ up_and_down(1); return 0;}void up_and_down(int n) { printf("Level %d: n location %p \n", n, &n); // #1 if (n < 4) { up_and_down(n + 1); } printf("Level %d: n location %p.原创 2021-09-19 18:32:13 · 187 阅读 · 0 评论 -
c之围棋与小麦
古时候,印度有个国王很爱玩。一天,他对大臣们说,希望得到一种玩不腻的玩意儿,谁能贡献给他,将有重赏。 不久,有个聪明的大臣向他献上一种棋子,棋盘上有64个格子,棋子上刻着“皇帝”、“皇后”、“车”、“马”、“炮”等字。下这种棋子,是玩一种变化无穷的游戏,确实让人百玩不厌。国王就对那个聪明的大臣说:“我要重赏你。说吧,你要什么,我都能满足你。” 那个大臣说:“我只要些麦粒。” “麦粒?哈,你要多少呢?” “国王陛下,你在第一格棋盘上放1粒,第二格上放2粒,第三格上放4粒,第四格上放8粒……...原创 2021-09-17 20:26:22 · 343 阅读 · 0 评论 -
c语言scanf_s输入字符串报错
在visual studio上使用scanf_s输入字符串报错,如scanf_s("%s", name);这是因为scanf_s在读取字符串时,需要提供一个数字以表明读取多少个字符,以防止溢出。scanf_s("%s", name, 20);原创 2021-09-16 21:09:25 · 4548 阅读 · 1 评论 -
c++标准库第六章标准模板库
一、STL容器元素必须满足3个基本要求:1、元素必须可复制或可搬移,即元素类型必须隐式或显式提供一个copy或move构造函数。被制造出来的拷贝应该与其原件等效2、元素必须可被assignment操作符加以搬移或赋值。容器和算法以新元素覆写旧元素时用的是assignment操作符3、元素必须可被一个析构函数销毁除此外,还应当满足:对于序列式容器而言,元素的default构造函数必须可用。可用在没有给予任何初值的情况下创建一个非空容器,或增加容器元素的个数,这些元素都将以default构造原创 2021-06-30 22:59:17 · 425 阅读 · 1 评论 -
c++标准库第五章通用工具5.2智能指针
一、c++11开始,标准库提供了两大类型的智能指针1、shared_ptr实现共享式拥有。多个智能指针可以指向相同对象, 该对象和其相关资源会在“最后一个reference被销毁”时被释放,标准库提供weak_ptr, bad_weak_ptr和enable_shared_from_this等辅助类2、unique_ptr实现独占式拥有或严格拥有。保证同一时间只有一个智能指针可以指向该对象二、可以像使用任何其他指针一样使用shared_ptr,可以赋值,拷贝,比较,也可以使用操作符*和->原创 2021-06-26 15:08:49 · 154 阅读 · 0 评论 -
c++标准库第五章通用工具5.1Pari和Tuple
一、pair 提供了直接访问对应数据成员的能力,因为pair是struct而不是class,默认所有成员都是public二、所有元素都相等,这两个pair对象才相等三、如果first相等,才继续比较second四、pair的copy构造函数有两个版本1、版本1接受相同类型的pair2、版本2是个member template,在“构造过程中需要隐式类型转换”时被调用五、如果pair对象被复制,调用的是被隐式合成的那个copy构造函数六、只有piecewise_construct作原创 2021-06-23 21:12:20 · 315 阅读 · 1 评论 -
c++标准库第四章一般概念
一、以前的头文件扩展名很多,包括.h, .hpp, .hxx,现在不需要扩展名:#include <iostream>二、#include也适用于C标准头文件,但必须采用前缀符合c,如:#include <cstdlib> 对应之前的<stdlib.h>#include <cstring> 对应之前的<string.h>三、以下namespace嵌套于std内:1、std::rel_ops2、std::chrono3、s原创 2021-06-21 23:03:42 · 1068 阅读 · 0 评论 -
c++标准库第三章 c++语言新特性
一、lambda不可以是template二、lambda目前已不鼓励函数指明异常明细三、lambda1、 [...] {...}2、 [...] (...) (mutable) (throwSpec) (->retType) {...}3、 [=]意味着外部作用域以by value方式传递给lambda,可以读取数据,但不能改动4、 [&]意味着外部作用域以by reference方式传递给lambda,可以读取数据,也可以改动5、 为了获得by value 和 b原创 2021-06-21 20:46:06 · 142 阅读 · 0 评论 -
QML中的模型/视图
import QtQuick 2.0Item { width: 200 height: 200 //ListView 在水平或垂直列表中排列条目 ListModel { id: myModel ListElement {type: "dog"; age: 8} ListElement {type: "cat"; age: 5} } Component { id: myDelegate .原创 2021-06-21 20:44:01 · 248 阅读 · 0 评论 -
QML图像、状态和动画
import QtQuick 2.12Item { Rectangle { id: rect width: 100 height: 100 gradient: Gradient { // position定义一个从0.0 - 1.0之间的位置 // color设置颜色 GradientStop {position: 0.0; color: "red"} .原创 2021-06-20 22:35:21 · 497 阅读 · 0 评论 -
QML基本事件处理
import QtQuick 2.0Item { Rectangle { id: rect // MouseArea事件 MouseArea { enabled: false// 设置为false,不再处理鼠标事件 pressed:{} // 是否按住了鼠标按钮,可以实现在鼠标按下时执行一些操作 containsMouse: {} // 当前是否有光标在MouseArea上.原创 2021-06-20 16:52:02 · 585 阅读 · 0 评论 -
QML基本布局管理
import QtQuick 2.12Item { // 垂直排列 Column { spacing: 2 Rectangle {color: "red"; width: 50; height: 50} Rectangle {color: "green"; width: 50; height: 50} Rectangle {color: "blue"; width: 50; height: 50} } //.原创 2021-06-20 16:00:54 · 317 阅读 · 0 评论 -
QML基础概念
一、属性通过 “属性:值” 语法来指定二、每一个对象都可以指定一个唯一的id值三、QML提供了一个QtQuick工具栏,在编写代码时按下"Ctrl + Alt + 空格"调出,也可以右键选择“显示QtQuick工具栏”四、QML属性是类型安全的,它们只允许分配一个匹配该属性类型的值五、QML基本类型 action action类型拥有QAction的所有属性 bool true和false colo原创 2021-06-20 14:51:55 · 375 阅读 · 0 评论 -
effective c++第一章
一、理解c++1、c:c++仍是以c为基础的,块、语句、预处理、内置数据类型、数组、指针等都来自c2、Object-Oriented c++:c with classes,classes包括构造函数、析构函数、封装、继承、多态、虚函数等3、Template c++: c++泛型编程4、STL: c++template程序库,对容器、迭代器、算法以及函数对象的规约二、尽量以const、enum、inline替换#define三、由于常量定义通常被放在头文件内,因此有必要将指针声明为co原创 2021-06-18 11:53:15 · 88 阅读 · 0 评论 -
c++primer之特殊工具与技术
一、当使用一条new表达式时,实际执行了3步操作:1、new表达式调用一个名为operator new(或者operator new[])的标准库函数,该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象2、编译器运行相应的构造函数以构造这些对象,并为其传入初始值3、对象被分配了空间并构造完成,返回一个指向该对象的指针二、当使用一条delete表达式删除一个动态分配的对象时,实际指向了2步操作:(delete p|delete []arr)1、对p所指的对象或arr所指原创 2021-06-17 22:57:10 · 172 阅读 · 0 评论 -
c++peimer之用于大型程序的工具
一、异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理二、异常使得我们能够将问题的检测与解决过程分离开三、通过抛出一条表达式来引发一个异常四、当执行一个throw时,跟在throw后面的语句将不再被执行,程序的控制权从throw转移到与之匹配的catch模块五、控制权从一处转移到另一处,则:1、沿着调用链的函数可能会提早退出2、一旦程序开始执行异常处理代码,则沿着调用链创建的对象将被销毁六、当throw在一个try语句块内时,检查与该try块关联原创 2021-06-17 22:55:05 · 167 阅读 · 0 评论 -
c++primer之标准库特殊设施
一、一个tuple可以有任意数量的成员二、tuple的构造函数是explicit的,必须使用直接初始化三、make_tuple函数使用初始值的类型来推断tuple的类型四、tuple一个常见用途是从一个函数返回多个值五、当定义一个bitset时,需要声明它包含多少个二进制位六、一个随机数引擎类可以生成unsigned随机数序列;一个随机数分布类使用一个引擎类生成指定类型的、给定范围的、服从特定概率分布的随机数七、传递给分布对象的是引擎对象本身,即u(e),如果将调用写成了u(e())原创 2021-06-17 22:53:51 · 67 阅读 · 0 评论 -
c++primer之模板与泛型编程
一、模板定义以关键字template开始,后跟一个模板参数列表,模板参数列表以逗号分隔,用小于号和大于号包围起来二、模板参数前使用关键字class或typename三、一个非类型参数表示一个值而非一个类型,通过一个特定的类型名而非关键字class或typename四、一个非类型参数可以是一个整型,或者是一个指向对象或函数类型的指针或引用。绑定到非类型整型参数的实参必须是一个常量表达式。绑定到指针或引用非类型参数的实参必须具有静态的生存期五、函数模板可以声明为inline或constexpr,原创 2021-06-16 21:13:17 · 283 阅读 · 0 评论 -
c++primer之面向对象程序设计
一、通常在层次关系的根部有一个基类,其他类别则直接或间接的从基类继承而来,这些继承得到的类称为派生类二、基类将类型相关的函数与派生类不做改变直接继承的函数区分对待,对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数三、类派生列表的形式是: 首先是一个冒号,后面紧跟以逗号分隔的基类列表四、派生类必须在七内部对所有重新定义的虚函数进行声明五、新标准允许派生类显示的注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后增加一个overrid原创 2021-06-16 21:12:07 · 85 阅读 · 0 评论 -
c++primer之重载运算与类型转换
一、重载运算符由关键字operator和其后要定义的运算符号组成二、对于二元运算符,左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数,除了重载的函数调用运算符operator()外,其他重载运算符不能含有默认实参三、如果一个运算符函数是成员函数,则它的第一个运算对象绑定到隐式的this指针上,因此,成员运算符函数的参数数量比运算符的运算对象总数少一个四、对于一个重载的运算符来说,其优先级和结合律与对应的内置运算符一致五、不能被重载的运算符: (::) ( .*) (.) (? :)原创 2021-06-14 17:22:44 · 138 阅读 · 0 评论 -
c++primer之拷贝控制
一、一个类通过定义5种特殊的成员函数来控制对象的拷贝、移动、赋值和销毁1、拷贝构造函数2、拷贝赋值运算符3、移动构造函数4、移动赋值运算符5、析构函数二、拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么; 拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么;析构函数定义了此类型对象销毁时做什么三、如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数:Foo(const Foo&)四、拷贝原创 2021-06-14 15:13:57 · 233 阅读 · 0 评论 -
c++primer之动态内存
class Foo{};template<typename T>shared_ptr<Foo> factory(T arg){ return make_shared<Foo>(arg);}template<typename T>void use_factory(T arg){ shared_ptr<Foo> p = factory(arg); // p 离开了作用域,它指向的内存会被自动释放}templat...原创 2021-06-09 21:47:05 · 135 阅读 · 0 评论 -
c++primer之关联容器
一、关联容器中的元素是按关键字来保存和访问的二、有2个主要的关联容器map和set三、map中的元素是一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关联的数据四、set中每个元素包含一个关键字五、标准库提供8个关联容器,体现在3个维度上:1、每个容器或者是一个set,或者是一个map2、或者要求不重复的关键字,或者允许重复的关键字3、按顺序保存元素,或者无序保存六、允许重复关键字的容器名字中都包含单词multi七、不保持关键字按顺序存储的容原创 2021-06-06 16:40:33 · 109 阅读 · 0 评论 -
c++primer之泛型算法
bool isShorter(const string& s1, const string& s2){ return s1.size() < s2.size();}bool check_size(const string& s, string::size_type sz){ return s.size() >= sz;}void elimDups(vector<string>& words){ // 排序words,以便...原创 2021-06-06 11:15:40 · 166 阅读 · 0 评论 -
c++primer之顺序容器
一、顺序容器提供了控制元素存储和访问顺序的能力二、所有顺序容器都提供了快速顺序访问元素的能力,但向容器添加或删除元素以及非顺序访问容器中的元素都有不同的性能代价三、顺序容器1、vector可变大小数组, 支持快速随机访问,在尾部以外的位置插入或删除元素较慢2、deque双端队列, 支持快速随机访问,在头尾位置插入或删除元素很快3、双向链表, 只支持双向顺序访问,在任何位置插入或删除都很快4、forward_list单向链表, 只支持单向顺序访问,在任何位置进行插入或删除都很快5、原创 2021-06-05 16:42:36 · 114 阅读 · 0 评论 -
c++primer之IO库
一、iostream定义了用于读写流的基本类型; fstream定义了读写命名文件的类型;sstream定义了读写内存string对象的类型二、IO库 iostream istream, wistream 从流读取数据 ostream, wostream 从流写入数据 iostream, wiostream 读写流 fstream ifstream, wiftream 从文件读取数据 ofstream, w原创 2021-06-05 10:06:26 · 161 阅读 · 0 评论 -
c++primer之类
一、所有成员都必须在类的内部声明二、成员函数体可以定义在类内也可以定义在类外三、成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象,当我们调用一个成员函数时,用请求该函数的对象地址初始化this四、在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无须通过成员访问运算符来做到这一点,因为this所指的正是这个对象,任何对类成员的直接访问都被看作this的隐式引用五、任何自定义名为this的参数或变量的行为都是非法的六、因为this的目的总是指向对象,所以this是原创 2021-06-04 00:03:57 · 97 阅读 · 0 评论 -
c++primer之表达式
一、需要右值的地方可以用左值来代替,但不能把右值当成左值使用,当一个左值被当成右值使用时,实际上使用的是它的内容二、当一元正运算符作用于一个指针或算术值时,返回运算对象值的一个副本三、bool b = true; bool b2 = -b;布尔类型变量b的值为真,参与运算时将被提升为整数1, 对它求负的结果为-1,将-1换回布尔值并将其作为b2的初始值,转换成布尔值后结果为1四、递增或递减前置版本和后置版本: 前置首先将运算对象加1,然后将改变后的对象最为求值结果。后置首先将运算对象加1,但求值原创 2021-05-30 09:43:21 · 98 阅读 · 0 评论 -
c++primer之数组
一、对数组的元素使用取地址符就能得到指向该元素的指针二、在很多用到数组名字的地方,编译器会自动的将其替换为指向数组首元素的指针三、当使用数组作为一个auto变量的初始值时,推断得到的类型时指针而非数组四、decltype返回的类型是由10个整数构成的数组五、可以通过数组名字或数组中首元素的地址得到指向首元素的指针, 可以通过获取数组尾元素之后的那个不存在的元素的地址六、c++11引入了begin和end,但与容器中的begin和end不同,begin 返回指向ia首元素的指针,end返回原创 2021-05-29 22:27:16 · 103 阅读 · 0 评论 -
Qt链接mysql报错QMYSQL driver not loaded
Qt在链接mysql时报错,QMYSQL driver not loaded,这个是由于没有mysql驱动的原因,查看下qt\5.14.2\mingw73_64\plugins\sqldrivers目录下是否有qsqlmysql.dllqsqlmysql.dll.debug如果没有就需要安装驱动文档在这里https://doc.qt.io/qt-5/sql-driver.html网上也有教程说怎么安装,这里说下我踩的坑1: 由于我安装了phpstydy,所以我想使用php原创 2021-05-25 22:07:18 · 329 阅读 · 0 评论 -
c++primer之迭代器
一、迭代器有有效和无效之分,有效迭代器或者指向某个元素,或者指向容器中尾元素的下一个位置,其他所有的情况都属于无效。二、begin成员负责返回指向第一个元素(或第一个字符)的迭代器, end成员负责返回指向容器(或string对象)尾元素的下一个位置的迭代器,也就是说,该迭代器指示的是容器的一个本不存在的尾后元素,这仅是个标记而已,表示我们已经处理完了容器中的所有元素。三、特殊情况下,如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。四、如果两个迭代器指向的元素相同或者都是原创 2021-05-23 11:13:07 · 1006 阅读 · 0 评论 -
Qt及Qt Quick开发实战精解项目二俄罗斯方块 rotate失效方法报错
在qt5中QGraphicsItem::rotate已经不再使用,而是使用setRotation。但setRotation设置围绕Z轴的顺时针旋转角度(以度为单位),比如setRotation(90)是旋转90度,但setRotaton不能持续旋转,比如我按旋转按钮是,第一次旋转90度正常,第二次就不动了。QGraphicsItem还提供了另外一个方法rotation(),回围绕Z轴的顺时针旋转(以度为单位)。默认值为0(即项目不旋转)。可以使用这个方法获取到旋转的角度,然后在这个基础上加9原创 2021-05-22 18:47:31 · 586 阅读 · 0 评论 -
c++primer之auto和decltype
一、c++11引入了auto类型说明符,用它能让编译器替我们区分析表达式所属的类型,auto让编译器通过初始值来推算变量的类型。二、auto一般会忽略顶层const三、decltype的作用是选择并返回操作数的数据类型四、如果decltype使用的是一个不加括号的变量,则得到的结果是该变量的类型。如果给变量加上了一层括号或多层括号,编译器就会把它当成是一个表达式,变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型。const int bi = 0,.原创 2021-05-22 16:41:05 · 137 阅读 · 0 评论 -
c++primer之const
一、const对象一旦创建后其值就不能再改变,所以const对象必须初始化。二、默认情况下,const对象被设定为仅在文件内有效,多个文件种出现同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。三、只在一个文件中定义const,在其他多个文件中要想声明并使用它,可以添加extern关键字。四、可以把引用绑定到const对象上,就像绑定到其他对象上一样, 我们称之为常量的引用,对常量的引用不能被用作修改它所绑定的对象。五、引用的类型必须与其所引用对象的类型一致,但有2个例外:原创 2021-05-22 16:09:28 · 147 阅读 · 0 评论