C/C++编程语言学习之路
文章平均质量分 66
C/C++编程语言学习笔记
浩瀚之水_csdn
路漫漫其修远兮,吾将上下而求索,立刻行动,坚持,努立
展开
-
常用的数学计算C++实现
1.判断三点顺序(顺时针或者逆时针)(模板)#include <bits/stdc++.h> using namespace std; int main() { double x1, y1, x2, y2, x3, y3; while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4){ //分别输入A,B,C三点的坐标 ..原创 2022-04-30 09:01:54 · 412 阅读 · 0 评论 -
QPainter使用整理
QPainter 基础绘图的几种用法方法一:无参构造画家时,需要手动调用begin(this)和end() 函数void MyWidget::paintEvent(QPaintEvent *){QPainter p;p.begin(this);p.drawLine(…); // drawing codep.end();}。。方法二:有参构造画家时,系统会自动调用begin(this)和end() 函数,可以立即直接使用画家进行绘图。这个构造函数对于寿命较短的画家很方便,例原创 2021-11-12 11:07:15 · 1370 阅读 · 0 评论 -
Qt绘制和保存成图片(手写签名)
想要实现的是,手写签名的效果,最终把手写的结果保存,也可以加上水印什么的。在控件的 MouseButtonPress 和 MouseMove 事件中,保存绘制的路径,然后再 Paint 重绘事件中绘制即可:特别需要注意的是,QImage QPixmap构造时,只是分配了空间,但是没有清空内存的,所以需要使用 fill() 填充图像,否则可能会得到混乱的图像. QImage img(ui->widgetPaint->size(),QImage::Format_ARGB32);转载 2021-11-13 11:20:03 · 1315 阅读 · 0 评论 -
深入浅出之C++11新特性
1. auto类型赋予新含义1.1 auto类型定义在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的。auto 表示变量是自动存储的,这也是编译器的默认规则,所以写不写都一样,一般我们也不写,这使得 auto 关键字的存在变得非常鸡肋。C++11 赋予 auto 关键字新的含义,使用它来做自动类型推导。也就是说,使用了 auto 关键字以后,编译器会在编译期间自动推导出变量的类型,这样我们就不用手动指明变量的数据类型了。auto 关键字基本的原创 2021-11-08 17:57:10 · 1053 阅读 · 0 评论 -
深入浅出之数据格式转换
1. QString -> QByteArrayQString buf = "123";QByteArray a = buf.toUtf8(); //中文a = buf.toLocal8Bit(); //本地编码2.QByteArray -> char *char *b = a.data();3.char * -> QString[网络编程常常涉及到char *p = "abc";QString c = QString(p);...原创 2021-11-06 14:15:28 · 80 阅读 · 0 评论 -
深入浅出之预处理
预处理的输出是“翻译单元”,他是存放在内存中的临时文件,编译器接受预处理输出,并将源代码转换成包含机器语言指令的目标文件。1. 宏替换1) 字符串替换格式: #define 宏名 宏体其中宏名与宏体均为字符串。预处理时,将把程序中该宏定义之后的所有的宏名用宏体替换。如:#define PI 3.14宏替换的好处:(1) 提高程序的可读性(2)易修改性好2) 带参数宏定义格式#define 标识符(参数表) 宏体例如:#define PI 3.14..原创 2021-11-06 09:14:45 · 251 阅读 · 0 评论 -
深入浅出之命名空间
定义命名空间命名空间的定义使用关键字namespace,后跟命名空间的名称,如下所示:namespace namespace_name { // 代码声明 }为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:name::code; // code 可以是变量或函数#include <iostream>using namespace std; // 第一个命名空间namespace first_space{ void func(){ .原创 2021-11-06 08:30:55 · 322 阅读 · 0 评论 -
深入浅出之数组
数组:一个固定大小的相同类型元素的顺序集合。1. 声明数组在 C++ 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:一维数组type arrayName [ arraySize ];二维数组type arrayName [ arraySize ][ arraySize ] ;三维数组type arrayName [ arraySize ][ arraySize ][ arraySize ] ;2. 初始化数组在 C++ 中,您可以逐个初始化数组,也可以使用一个原创 2021-11-05 11:19:32 · 126 阅读 · 0 评论 -
深入浅出之函数的参数传递方式
1 按值传递按值传递也称传值,其传递形式是形参为普通变量,实参为表达式或变量,实参向形参赋值。按值传递的特点是参数传递后,实参和形参不再有任何联系。需要注意的是,此时实参是表达式,故形参不可能给实参赋值。函数被调用时,系统为形参分配相应的存储单元,用于接受实参传递的数据。函数调用期间,形参和实参各自拥独立的存储丹云。函数电泳结束,系统回收分配给形参的存储单元。传值调用的优点是函数调用对其外界的变量无影响,最多只能用return返回一个值,函数独立性强。#include <QCoreA原创 2021-11-04 17:57:39 · 1228 阅读 · 0 评论 -
深入浅出之动态内存(new,malloc深度分析)
1. 关键字、操作符与库函数关键字是编译器保留的文字,不能被用户拿来重新声明,像const, new, if等等 操作符必须要有操作对象,操作符本质上可以视为编译器内置的基础的函数。操作符在c++中,可以被重载(除了部分例外,比如 . :: sizeof)。 库函数是编写在编译器头文件库里,要包含头文件才能调用的封装函数。2.自由存储区与堆的区别堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍..原创 2021-11-04 10:19:27 · 2279 阅读 · 0 评论 -
MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK o
MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution".原因:vs2015对windows10 系统支持不好,vs2..转载 2021-10-12 18:07:58 · 1235 阅读 · 0 评论 -
深入浅出设计模式原则之迪米特法则(LoD)
下面以“明星与经纪人的关系实例”为例来说明迪米特法则原则的应用分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,其类图如图 1 所示。图1 明星与经纪人的关系图#include <QCoreApplication>#include <iostream>/*! * \brief Star class */class Sta.原创 2021-01-10 21:07:07 · 879 阅读 · 0 评论 -
深入浅出设计模式原则之接口隔离原则(ISP)
下面以学生成绩管理程序为例介绍接口隔离原则的应用。分析:学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能,如果将这些功能全部放到一个接口中显然不太合理,正确的做法是将它们分别放在输入模块、统计模块和打印模块等 3 个模块中,其类图如图 1 所示。图1 学生成绩管理程序的类图#include <QCoreApplication>#include <iostream>/*! * \brief 输入模块 */原创 2021-01-10 19:58:07 · 322 阅读 · 0 评论 -
深入浅出设计模式原则之依赖倒置原则
下面以“顾客购物程序”为例来说明依赖倒置原则的应用。【例1】依赖倒置原则在“顾客购物程序”中的应用。#include <QCoreApplication>#include <iostream>//! shopclass Shop{public: virtual std::string Sell() = 0;};class ShaoguanShop:public Shop{public: std::string Sell(){原创 2021-01-10 15:53:47 · 447 阅读 · 0 评论 -
深入浅出之抽象与非抽象
一、虚函数&纯需函数虚函数是在基类中使用关键字virtual声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。class Shape { protected: int width, height; public: Shape( int a=0, int b=0) { width...原创 2021-01-09 16:37:26 · 1458 阅读 · 0 评论 -
深入浅出设计模式原则之单一原则(SRP)
一、单一职责原则简介1.1 单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出..原创 2021-01-09 14:04:48 · 354 阅读 · 0 评论 -
深入浅出设计模式原则之里氏代换原则(Liskov Substitution Principle)
一、里氏替换原则(源自里氏替换原则——面向对象设计原则)1.1 里氏替换原则的定义里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出:继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure th原创 2021-01-09 15:34:26 · 399 阅读 · 0 评论 -
深入浅出设计模式原则之开闭原则(OCP)
一、开闭原则(源自开闭原则——面向对象设计原则)1.1 开闭原则的定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这原创 2021-01-09 14:51:29 · 445 阅读 · 0 评论 -
深入浅出设计模式之设计模式简介
一、什么是设计模式(详见设计模式概念和七大原则)在GoF(Gang of Four)的书籍《Design Patterns - Elements of Reusable Object-Oriented Software(设计模式-可复用面向对象软件的基础)》中是这样定义设计模式的:Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动” [AIS+77,第10页]。尽管Alexand原创 2021-01-09 09:32:23 · 587 阅读 · 0 评论 -
深入浅出之STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++ 标准模板库的核心包括以下三个组件:组件 描述 容器(Containers) 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 算法(Algorithms) 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排原创 2021-01-05 22:20:25 · 293 阅读 · 0 评论 -
C++构造函数总结
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include <iostream>using namespace std;class CExample {private: int a;public: //构造函数 CExample(int b)原创 2020-12-31 09:54:25 · 3397 阅读 · 0 评论 -
C++ const 关键字小结
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。一、const修饰普通类型的变量const int a = 7; int b = a; // 正确a = 8; // 错误,不能改变转载 2020-12-30 21:30:07 · 215 阅读 · 0 评论 -
高质量C++/C编程指南(林锐)
版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐 2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐 2001-7-18...转载 2020-12-30 20:53:15 · 1204 阅读 · 0 评论 -
C语言保存负数
#include <QCoreApplication>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); int i = -3,j = 3; FILE *fp; fp = fopen("data","w"); fprintf(fp,"%x %x %x",i&0xFF,j&0xFF,(i*j)&0xFF); fclose(fp); .原创 2020-12-30 20:30:38 · 544 阅读 · 0 评论 -
C语言sprintf与sscanf函数
1、前言 OUI是指Organizationally unique identifier (组织唯一标识符),签发给各类组织的唯一标识符。MAC地址共有6个字节48位组成,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。详细介绍参考:http://standards.ieee.org/develop/regauth/oui/public.html。oui.txt文件中记录世界所有网卡的制造厂商,共有18859个。文件中记录mac的前三位与公司的对应关系。本文目地是对o.转载 2020-12-26 11:50:57 · 496 阅读 · 0 评论 -
C语言编译过程详解
C语言编译过程详解前言C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。编写hello world C程序:// hello.c#include <stdio.h>int main(){ printf("hello world!\n");}编译过程只需:$ gcc hello.c # 编译$ ./a.out # 执行hello world!这个过程如此熟悉,以至于大家觉得编译转载 2020-09-01 10:17:27 · 244 阅读 · 0 评论 -
OpenCV Mat编程练习
QT += coreQT -= guiCONFIG += c++11TARGET = myOpencvTest1CONFIG += consoleCONFIG -= app_bundleTEMPLATE = appSOURCES += main.cppINCLUDEPATH += C:\OpenCv4.0\include \ C:\Ope...原创 2020-03-03 17:23:29 · 1014 阅读 · 0 评论 -
嵌入式七大核心方向
1.Linux应用开发2.andorid应用开发3.Unix原创 2014-05-08 21:11:20 · 771 阅读 · 0 评论 -
C/C++混合编程——extern "C"
1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程 式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支 持函数的重载,C++对全局函数的处理方式与C有明显转载 2014-04-19 20:43:21 · 627 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2012-09-11 22:00:29 · 406 阅读 · 0 评论 -
open和fopen的区别
open和fopen的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则转载 2012-09-11 21:59:04 · 358 阅读 · 0 评论 -
\r与\n的区别,以及\r\n的用法
\r是回车,英文是Carriage return,作用:使光标到行首\n是换行,英文是New line/line feed,作用:使光标下移一行如果用过机械打字机,就知道回车和换行的区别了。 回车就是把水平位置复位,不卷动滚筒。换行就是把滚筒卷一格,不改变水平位置。我们平时所说的键盘Enter键换行实则应该叫做叫做回车换行(\r\n)看到一种说法:windows下en...转载 2020-02-13 11:32:39 · 2916 阅读 · 2 评论 -
C 风格字符串与C++中string类区别
1. 概述字符串是若干个有效字符(字母、数字、专用字符、转义字符等)的序列。C语言中没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符型数组中。因此,为了存放字符串,常常在程序中定义字符型数组。C++中,string 类是STL中 basic_string 模板实例化得到的模板类,方便对字符串进行操作。2. 区别 C字符串 string...原创 2020-01-30 22:12:24 · 1071 阅读 · 0 评论 -
深入浅出之模板
模板是实现代码重用机制的一种工具,他可以实现参数类型化,即把参数定义为烈性,从而实现代码的可重用性。同时模板能够减少源代码量并提高代码的机动性,却不会降低类型的安全。模板分为类模板和函数模板。模板把功能相似、仅数据类型不同的函数或类设计为通用的函数模板或类模板,提供给用户。一、 函数模板函数模板的一般定义形式是:template <class或typenameT> 返...原创 2020-01-30 12:11:35 · 464 阅读 · 0 评论 -
深入浅出之string
string 类是STL中 basic_string 模板实例化得到的模板类。其定义如下:typedef basic_string <char> string;1. 定义及初始化string对象string 类有多个构造函数,用法示例如下:1) string()字符串为空值 如:string s1(); // si = ""2)string(const c...原创 2020-01-30 12:10:46 · 345 阅读 · 0 评论 -
深入浅出之容器
一、容器的定义容器是用来管理某一类对象的集合。在C++中属于标准模板库(STL)。C++标准模板库里提供了3类容器: 容器的优点1)容器类是一种对特定代码重用问题的良好的解决方案。2)可以自行扩展。当不知道需要存储多少对象时,就不知道应当开辟多大内存空间,而容器不需要预先设定空间长度,只需...原创 2020-01-29 20:54:36 · 554 阅读 · 0 评论 -
深入浅出之文件操作
一、文件定义所谓“文件”是记录在外部介质上的数据的集合。二、缓冲文件系统(标准I/O)目前C语言所使用的磁盘文件有两大类,一类称为缓冲文件系统,又称为标准文件系统或高层文件系统;另一类称为非缓冲文件系统,又称为底层文件系统。缓冲文件系统的特点是对程序中的每一个文件都在内存中开辟一个缓冲区,从磁盘文件输入的数据先输入到缓冲区中,然后再通过缓冲区依次将数据送给接收变量。这样做...原创 2020-01-28 16:07:01 · 1573 阅读 · 0 评论 -
深入浅出之构造类型
一、构造类型的概念构造类型也称为组合类型,是由基本类型按照一定规律组合而成。二、数组类型数组是由同类型数组组合而成的序列,用一个统一的数组名来标识这一组数据。2.1 数组定义一维数组:类型标识符 数组名[常量表达式];二维数组:类型标识符 数组名[常量表达式][常量表达式];三维数组:类型标识符 数组名[常量表达式][常量表达式][常量表达式];2.2 数组的...原创 2020-01-26 20:31:54 · 2735 阅读 · 0 评论 -
深入浅出之函数
一、函数定义 <函数类型> <函数名>(形式参数表){ 函数内容}形式参数是指这些参数实际上并不存在,只是在形式上代表运行时实际出现的参数。形式参数有如下特点:1) 当被调用的函数有参数时,主调函数和被调用函数之间通过形参实现数据传递。2) 函数的形参进在函数被调用时才由系统分配内存,用于接受主调函数传递来的实际参数。#inc...原创 2020-01-23 18:32:25 · 783 阅读 · 0 评论 -
深入浅出之指针
一、指针的概念 在程序中,我们所定义的变量,都要在内存中占有一个可标识的存储区域。每一个存储区域由若干个字节组成,在内存中每一个字节都有一个“地址”,一个存储区域的“地址”指的是存储区域中第一个字节的地址。 指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地...原创 2020-01-23 10:51:13 · 1054 阅读 · 0 评论