C++基础知识点

c++基础知识点总结 文章目录1. 迭代器(1)迭代器特点(2)函数(3)迭代器的种类(每种又划分为常量和变量)2.容器(1)容器的特点(2)顺序容器的比较3. 容器适配器(1)容器适配器特点(2)stack模板类4. 关联容器(1)set模板类(2)map模板类 1. 迭代器 看实例学迭代器 #include "pch.h" #include <iostream> #include <vector&... 阅读详情

一、#include “filename.h”和#include<filename.h> 的区别

#include “filename.h”是指编译器将从当前工作目录上开始查找此文件

#include<filename.h>  是指编译器将从标准库目录中开始查找此文件

二、头文件的作用

加强安全检测

通过头文件可能方便地调用库功能,而不必关心其实现方式

三、* , &修饰符的位置

对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名

四、if语句

不要将布尔变量与任何值进行比较,那会很容易出错的。

整形变量必须要有类型相同的值进行比较

浮点变量最好少比点,就算要比也要有值进行限制

指针变量要和NULL进行比较,不要和布尔型和整形比较

五、const和#define的比较

const有数据类型,#define没有数据类型

个别编译器中const可以进行调试,#define不可以进行调试

在类中定义常量有两种方式

1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;

2、 用枚举代替const常量。

六、C++函数中值的传递方式

有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)

void fun(char c) //pass by value

void fun(char *str) //pass by pointer

void fun(char &str) //pass by reference

如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构

函数的类型不能省略,就算没有也要加个void

七、函数体中的指针或引用常量不能被返回

Char *func(void)

{

char str[]=”Hello Word”;

//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉

return str;

}

函数体内的指针变量并不会随着函数的消亡而自动释放

八、一个内存拷贝函数的实现体

void *memcpy(void *pvTo,const void *pvFrom,size_t size)

{

assert((pvTo!=NULL)&&(pvFrom!=NULL));

byte *pbTo=(byte*)pvTo; //防止地址被改变

byte *pbFrom=(byte*)pvFrom;

while (size-- >0)

pbTo++ = pbForm++;

return pvTo;

}

九、内存的分配方式

分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题

1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。

2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。

3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。

十、内存分配的注意事项

用new或malloc分配内存时,必须要对此指针赋初值。

用delete 或free释放内存后,必须要将指针指向NULL

不能修改指向常量的指针数据

十一、内容复制与比较

//数组……

char a[]=”Hello Word!”;

char b[10];

strcpy(b,a);

if (strcmp(a,b)==0)

{}

//指针……

char a[]=”Hello Word!”;

char *p;

p=new char[strlen(a)+1];

strcpy(p,a);

if (strcmp(p,a)==0)

{}

十二、sizeof的问题

记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节

char a[]=”Hello World!”

char *p=a;

count<<

count<<

而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4

void fun(char a[1000])

{

count<<

}

十三、关于指针

1、 指针创建时必须被初始化

2、 指针在free 或delete后必须置为NULL

3、 指针的长度都为4字节

4、释放内存时,如果是数组指针,必须要释放掉所有的内存,如

char *p=new char[100];

strcpy(p,”Hello World”);

delete []p; //注意前面的[]号

p=NULL;

5、数组指针的内容不能超过数组指针的最大容易。

如:

char *p=new char[5];

strcpy(p,”Hello World”); //报错 目标容易不够大

delete []p; //注意前面的[]号

p=NULL;

十四、关于malloc/free 和new /delete

l malloc/free 是C/C+的内存分配符,new /delete是C++的内存分配符。

l 注意:malloc/free是库函数,new/delete是运算符

l malloc/free不能执行构造函数与析构函数,而new/delete可以

l new/delete不能在C上运行,所以malloc/free不能被淘汰

l 两者都必须要成对使用

l C++中可以使用_set_new_hander函数来定义内存分配异常的处理

十五、C++的特性

C++新增加有重载(overload),内联(inline),Const,Virtual四种机制

重载和内联:即可用于全局函数,也可用于类的成员函数;

Const和Virtual:只可用于类的成员函数;

重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数,必须用全局引用符号::引用。

覆盖是指派生类函数覆盖基类函数

函数名相同;

参数相同;

基类函数必须有Virtual关键字;

不同的范围(派生类和基类)。

隐藏是指派生类屏蔽了基类的同名函数相同

1、 函数名相同,但参数不同,此时不论基类有无Virtual关键字,基类函数将被隐藏。

2、 函数名相同,参数也相同,但基类无Virtual关键字(有就是覆盖),基类函数将被隐藏。

内联:inline关键字必须与定义体放在一起,而不是单单放在声明中。

Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

1、 参数做输入用的指针型参数,加上const可防止被意外改动。

2、 按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上const关键字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:

将void Func(A a) 改为void Func(const A &a)。

而void func(int a)就没必要改成void func(const int &a);

3、 给返回值为指针类型的函数加上const,会使函数返回值不能被修改,赋给的变量也只能是const型变量。如:函数const char*GetString(void); char *str=GetString()将会出错。而const char *str=GetString()将是正确的。

4、 Const成员函数是指此函数体内只能调用Const成员变量,提高程序的键壮性。如声明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。

Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现体;

十六、extern“C”有什么作用?

Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。

Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可。

十七、构造函数与析构函数

派生类的构造函数应在初始化表里调用基类的构造函数;

派生类和基类的析构函数应加Virtual关键字。

不要小看构造函数和析构函数,其实编起来还是不容易。

#include

class Base

{

public:

virtual ~Base() { cout<< "~Base" << endl ; }

};

class Derived : public Base

{

public:

virtual ~Derived() { cout<< "~Derived" << endl ; }

};

void main(void)

{

Base * pB = new Derived; // upcast

delete pB;

}

输出结果为:

~Derived

~Base

如果析构函数不为虚,那么输出结果为

~Base

十八、#IFNDEF/#DEFINE/#ENDIF有什么作用

仿止该头文件被重复引用

 
含动力学条件的Stefan问题的古典解 (1991年) 本文证明了含动力学条件的一维两相Stefan问题古典解的存在唯一性. 立即下载

相关推荐

期货分仓系统CTP协议/国内期货软件源码

期货分仓系统与CTP协议以及国内期货软件源码是期货交易技术领域的几个重要方面。

q2247238820的博客 959

关于self关键字

self关键字 OC提供了一个self关键字,self关键字总是指向调用该方法的对象。 一: self最大的一个作用是让类中的一个方法访问该类的另一个方法或成员变量。用法如下: #import "FKDog.h" @impiementation FKDog //实现一个jump方法 - (void) jump { NSLog (@"正在执行jump方法"); } - (void)...

星星leslie的博客 3099

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 409

self、类的继承和派生、实例变量修饰符、多态、类的本质

一、self关键字 1、self 和 super OC提供了两个保留字 self 和 super,用于在方法定义中引用执行 该方法的对象。 OC语言中的self,就相当于C++、Java中的this指针 学会使用self,首先要搞清楚属性这一概念,以及理解sette

zjqx_w的博客 1150

Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践

摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。

GateWorld的博客 1435

c# 如何使用S7NET 读取汇川H5U的数据

本文介绍了两种使用C#读取汇川H5U PLC数据的方法。第一种通过ModbusTCP协议(推荐),使用NModbus库实现,步骤包括配置PLC的Modbus服务器功能、安装库及编写读取保持寄存器的代码。第二种针对兼容西门子S7协议的型号,使用S7NetPlus库直接读取。文章强调需注意地址映射关系、协议配置及网络设置,并建议优先采用ModbusTCP方案以确保稳定性。两种方法均提供了完整的代码示例,帮助开发者快速实现在C#环境下与汇川H5U PLC的通信。

StevenChen的博客 456

self 关键字的使用

根据上一篇的内容,当我们访问成员变量的时候,使用的是对象调用set的方法实现,但是有时候代码会很繁琐,所以为了解决这一问题,采用了self关键字访问; #import @interface Car : NSObject { int _wheels; } -(void)setWheels:(int)wheels; -(int)wheels; -(void)run; @end @imp

yishabeier152的专栏 1200

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 474

C++中的this和Python的self对比

  Python,当实例对象调用函数(函数其实都是属于类空间的)的时候,系统会自动将对象本身传入 函数在定义时的第一个变量一般是self。(但self并不是关键字,用其他名字也可以) 定义时,这个self必须写出来,而调用时,不用你自己将实例对象传入。   C++,当实例对象调用函数时,系统也会将实例对象传入函数,不同是不管是定义还是调用,存储对象的这个 参数都是隐藏的...

950

[特殊字符] 从零构建携程/飞猪机票价格爬虫:Python异步抓取与反爬对抗实战

在出行决策、竞品分析、价格预测模型训练等场景中,稳定获取携程(Ctrip)和飞猪(Fliggy)的实时机票价格波动数据是刚需。然而,这两大平台均部署了业界顶尖的反爬体系——包括但不限于:动态请求签名(SignToken设备指纹采集(UACanvasWebGL接口参数加密(X-Sign_abtestcookie混淆)频率限制与 IP 封禁(滑动窗口 + 行为检测)目录前言:为什么需要自建机票价格爬虫?一、技术选型与项目架构1.1 核心技术栈1.2 系统架构图(文字描述)1.3 法律与道德声明。

2201_76125261的博客 337

AE-扭曲-变形-弧

一些AE效果的着色器实现记录

What_can_you_do的博客 1172

C++知识点

C++知识点[ 2005-09-23 11:28:38 | 作者: Admin ] 字体大小: 大 | 中 | 小 这是对C++高效编程的一个总结, 很有指导作用.一、#include “filename.h”和#include 的区别#include “filename.h”是指编译器将从当前工作目录上开始查找此文件#include 是指编译器将从标准库目录中开始查找此文件二、头文件的作用加强

游戏人生的专栏 994

十.镜头知识之畸变问题

对于理想光学系统,在一对共轭的物像平面上,像的放大率是一个常数。但是对于实际的光学系统,当视场较大或很大时,像的放大率就要随视场而异,这样就会使像相对于物体失去相似性。这种使像变形的成像缺陷称为畸变。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2123

C++基础知识点预览

数组是以系列元素;数据中所有元素的类型都相同;这组元素形成一个完整的集合。预处理器在编译之前运行,预编译器指令都以#打头。C++程序通常在.h(头文件)中声明类和函数,并在.cpp文件中定义函数,因此需要在.cpp文件中使用预处理器编译指令#include来包含头文件。#define定义常量;#ifndef和#endif:在预处理器看来,两个头文件包含对方会导致递归问题。为避免这种问题,可结合使用过宏以及预处理器编译指令#ifndef和#endif;

wangyongyao1989的博客 1179

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C++面试基础知识点

1. 使用allocate向内存池请求size大小的内存空间, 如果需要请求的内存大小大于128bytes, 直接使用malloc. 2. 如果需要的内存大小小于128bytes, allocate根据size找到最适合的自由链表.   a. 如果链表不为空, 返回第一个node, 链表头改为第二个node.   b. 如果链表为空, 使用blockAlloc请求分配node.     x. 如果内存池中有大于一个node的空间, 分配竟可能多的node(但是最多20个), 将一个node返回, 其

qq_26553669的博客 2469

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++基础知识点汇总

C++基础知识点汇总 1.new和malloc的区别 2.C++运算符 3.&: 取地址运算符、定义变量引用 4.关于const 5.一些数据类型和变量赋值语法 6.常用的几个标准C++函数 7.switch-case的写法 8.函数的几个属性和用法 9.函数指针的用法 10.typedef的不常用用法 11.类的private/protected/public属性 12.关于空类 13.继承或多重继承情况下构造函数的调用顺序 14.虚函数、纯虚函数和抽象类、虚析构函数 15.多重继承情况下如何.

turbock的博客 2199

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【C++基础知识点】

大二学生个人学习笔记,欢迎各位大佬批评指正!

2501_92887501的博客 839

c++基础知识点思维导图汇总

weixin_57535407的博客 1439

【C++】面试常用知识点总结——基础篇

三次握手的最主要目的是确认双方都有收发数据的能力。三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。第一次: A发给B。证明A有发消息的能力。第二次: B收到并发消息给A。证明B有收消息,并且有发消息的能力。第三次: A收到B消息。证明A有收消息的能力。二次握手达不到目的,四次多余。双方关闭连接要经过双方都同意。

沙师弟专栏 5万+

C++基础,知识点总结

代码的“分区工具”,防止名字冲突。:类是“设计图”,对象是按图造出的“实物”。:关注“做什么”,不关心“怎么做”。:“同一操作,不同结果”。比如“动物叫”,猫是“喵”,狗是“汪”。:对象的“临终遗言”,负责清理资源(比如停车后关发动机)。:“儿子继承爸爸的财产”,子类自动拥有父类的属性和方法。:多个类有共同特征时(如“猫”和“狗”都是“动物”)。:对象的“出生仪式”,负责初始化(比如给新车加油)。:对象的“身份证”,在成员函数中代表“我自己”。:强制子类实现的“空头支票”,父类只声明不实现。

xiaojin511025的博客 677

2.C++之基础知识点总结

C++之基础知识点总结 1.C++和C的区别 设计思想上: C++是面向对象的语言,而C是面向过程的结构化编程语言; 语法上: C++具有重载、继承和多态三种特性; C++相比C,增加多许多类型安全的功能,比如强制类型转换; C++支持范式编程,比如模板类、函数模板等。 2. C/C++ 中指针和引用的区别 (1).指针有自己的一块空间,而引用只是一个别名; (2).使用sizeof看一个指针的大...

浩海烟云的博客 231

C++基础知识点过渡

内联函数使用关键字inline放在函数定义(不是声明)的前面,inline可以建议编译器进行主函数展开编译,如果生效,则可以提升程序的运行效率,因此消除了函数调用的额外开销。使用引用传递参数可以提升传递效率,因为不产生副本,引用参数参数应该在能被定义为const的情况下,尽量定义为const,以达到引用的安全性。如果不传入参数,则使用默认值。一个函数的参数只有类型没有名字,则这个参数就是哑元,这样的函数就是哑元函数。引用的指针:可以把引用的地址交给指针保存,此时指针指向的还是引用的原变量。

fzc2022的博客 1271

C++基础语法知识点

C++基础语法知识点 指针和引用 指针和引用一样都占用内存,内存存放变量的地址 以下是我的分析,源代码: #include <stdio.h> int main(){ int a = 2; int *p = &a; int c = 4; int &b = c; printf("pointer %d hand %d \n", *p, b); return 0;...

jackzhouyu的专栏 934

C/C++基础知识点

静态区域:全局变量、静态变量、常量。堆:动态分配的内存(通过mallocnew等)。栈:函数局部变量、函数调用信息。每个区域的存储方式和管理方式有所不同,栈和堆是由程序运行时进行管理的,而静态区域则在程序启动时分配并在程序退出时释放。特性全局变量静态变量常量定义位置函数外部定义函数内部或外部使用static关键字声明使用const关键字或#define定义生命周期程序从开始到结束程序从开始到结束程序从开始到结束作用域程序中的任何地方都可以访问仅限于函数或源文件仅限于其声明的作用域。

@宁兰 的博客 1106

C++基础知识点总结

自学c++过程中遇到的一些需要记忆的知识点,参考小甲鱼C++教程。

深度学习 || 神经网络 1万+

cpp的基础知识点

首先的话是cpp兼容c。

mmmsjc的博客 604
上一篇: video4linux(v4l)使用摄像头的实例基础教程与体会
下一篇: python的一些基础知识
zhouxf_cn
博客等级 码龄14年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值