C++
文章平均质量分 70
_Amen
自律自由
展开
-
C++学习笔记15 - struct、class、const、mutable
1、class的前置声明就是class的声明,安慰编译器的类的声明中直接写函数体,则此函数会被编译器inline化处理类的声明中正常处理,而成员函数的实现中加inlineinline的成员函数应该放在hpp中,而不是cpp中,这个一定要注意,因为inline是在编译时替换的// 访问权限 public :// 属性 mutable string name;// 名字 bool male;// 性别,男为true,女为false person() {};...原创 2022-08-11 19:31:05 · 806 阅读 · 1 评论 -
C++学习笔记14 -访问权限问题
c++访问权限问题原创 2022-08-11 19:07:03 · 1057 阅读 · 0 评论 -
C++学习笔记13 - 浅拷贝和深拷贝
c++的浅拷贝与深拷贝原创 2022-08-10 19:58:43 · 738 阅读 · 0 评论 -
C++学习笔记12 - 构造函数和析构函数
1、元素2、实战中,一般一个cpp和一个hpp文件配对,描述一个class,class的名字和文件名相同。3、面向对象式编程总结4、C++学习的三重境界1、什么是构造函数2、构造和析构一般用法3、为什么需要构造函数和析构函数1、析构函数的使用2、在class中使用动态内存变量3、用valgrind工具查看内存泄漏1、构造函数一大功能就是初始化成员变量2、C++的成员初始化列表3、构造函数使用参数默认值...原创 2022-08-09 19:43:17 · 595 阅读 · 0 评论 -
C++学习笔记11 - C++的内存管理
一、为什么要研究内存管理程序就是数据加算法写程序是为了解决某个问题,生活中的问题最终被计算机抽象为控制或运算CPU中的主要构件就是运算器和控制器,本质上是一堆组合逻辑电路,表现为机器指令集一个问题对应一个程序,一个程序分为多个函数,一个函数分为多个机器指令存储机器指令需要内存,机器指令的执行过程需要内存参与,这是内存的2大作用算法对应机器指令(ROM内存),数据对应RAM内存,CPU对应工作机器越是偏底层的语言,越对内存管理具体化,效率也越高,同时对编程者要求也越高计算机中如何管理内存原创 2022-04-15 21:17:30 · 210 阅读 · 0 评论 -
C++学习笔记10 - 异常处理机制
何为异常处理异常exception,即运行时错误C中没有异常机制,所以运行时遇到错误只能终止程序C++中新增了异常处理机制,允许程序在运行时拦截错误并处理,这样程序就不用终止异常机制的一个典型案例就是:由用户输入2个数字然后相除中的除0异常try , catch , throw异常处理机制为什么优于出错条件判断:https://www.cnblogs.com/wkfvawl/p/10816156.html异常和函数throw 一个异常后,如果没有 catch,会层层向外传递,直到被 c原创 2022-04-11 17:59:59 · 995 阅读 · 0 评论 -
C++学习笔记9 - 类与面向对象中的关键字
一、C++类与面向对象struct 和 classstruct 是C 中用户自定义类型,主要功能是对功能相关数据的封装struct 不能直接封装函数,但可以通过封装函数指针来间接封装函数struct 就是 class 的初级阶段,class 在 struct 基础上做了很多扩展,便有了面向对象访问权限类是对数据(成员变量)和方法(成员函数)的封装封装的一个重要特征就是访问权限管控,本质是为了隐藏实现细节,避免意外篡改C++ 支持三个访问管控级别:private、protected、pu原创 2022-04-11 17:09:28 · 1442 阅读 · 0 评论 -
C++学习笔记8 - static_cast、reintepret_cast、const_cast、dynamic_cast、auto、decltype
一、static_cast源生类型之间的隐式类型转换,可以用 static_cast 来明确告知编译器,避免警告,转换后可能丢失精度。正确性需要程序员自己保证。用来将(void *p)转为具体的指针类型,取回原有的指针类型用于类层次结构中父类和子类之间指针和引用的转换。其中上行转换是安全的,下行转换是不安全的。总结:static_cast<>()是编译时静态类型检查,使用 static_cast 可以尽量发挥编译器的静态类型检查功能,但是并不能保证代码一定“正确”(譬如可能会丢失精度导原创 2022-04-07 21:10:47 · 1231 阅读 · 0 评论 -
C++学习笔记7 - alignof、alignas、typeid
一、C++内存对齐C语言中内存对齐关键点#pragma 和__attribute__((aligned(n)))#pragma 用于向下对齐,也就是向小对齐。(char和int,向char对齐,在我的Ubuntu64位系统内存中占5字节)而__attribute__((aligned(n))) 用于向上对齐,也就是向大对齐。(char和int,向int对齐,在我的Ubuntu64位系统内存中占8字节)C++中内存对齐新增关键字C++11起,新增 alignof 和 alignasal原创 2022-04-06 21:16:29 · 1297 阅读 · 0 评论 -
C++学习笔记6 - nullptr空指针、静态断言
一、C++11 引入的nullptrC语言中的NULLNULL用来标记空指针NULL在C和C++中的定义不同,因为C++不允许(void*)隐式转为(int*)等指针类型C++中也可以继续用NULL,但是因为函数重载的引入,NULL传参会带来歧义。比如2个重载函数:void func(int* a); 和 void func(char* c);C语言中NULL就是 (void*)0; C++语言中NULL就是0NULL和nullptr的区别NULL是个宏定义,而nullptr原创 2022-04-06 20:42:14 · 1042 阅读 · 0 评论 -
C++学习笔记5 - enum枚举、union共用体、inline内联
一、enum枚举C++继承C的枚举用法典型枚举类型定义,枚举变量定义和使用。枚举类型中的枚举值常量不能和其他外部常量名称冲突。enum day {MON, THU, WEN}; // C和C++98等老版本里的写法enum day d1; // 定义了一个day类型的变量,变量名是d1//实际上,C中习惯用typedef来重命名类型以避免每次类型使用都加enumtypedef enum {MON, THU, WEN} day;C++11 中扩展的枚举enum class day原创 2022-04-02 20:28:21 · 1268 阅读 · 0 评论 -
C++学习笔记4 - extern “C“
一、为什么需要混合编程1、C有很多优秀成熟项目和库,C++程序里要调用,没必要重新2、庞大项目划分后,一部分适合用C,一部分适合用C++二、为什么不同语言可以混合编程1、程序编译过程:源文件 -> 目标文件 -> 可执行文件 -> 镜像文件2、任何编程语言执行时都必须是可执行程序,所以都必须先被编译成目标文件3、混合编程的 “混合” 操作发生在链接这一步三、C++和C混合编程的困难1、C++和C都是编译型语言,互相混合相对容易2、难点:C++支持函数名重载,而C不支持,因原创 2022-04-01 20:25:51 · 792 阅读 · 0 评论 -
C++学习笔记3 - 引用&
一、引用介绍1、定义: int a ; int &b = a;2、引用定义和识别的关键:&符号。注意这里和取地址没有任何关系。3、引用符号在定义时必须同时初始化,以后不能再另外赋值,只能使用。二、引用和指针的对比1、指针在C和C++中都有,且使用方法和实现本质完全相同,引用只有C++可用。2、引用可以理解为功能弱化、安全性增强的低配版指针。3、引用能做的事情,指针都能做。但指针能做的事情,引用不一定能做。4、引用是它指向变量的“别名”,这个是从引用的使用效果角度原创 2022-04-01 17:51:26 · 527 阅读 · 0 评论 -
C++学习笔记2 - iostream库
1、C++标准库介绍1.1 C++是C的超集一个典型的C程序(后缀名.c)可以完全被视为C++程序来编译(用g++编译)C程序可以通过__cplusplus符号是否预定义来判断当前是gcc还是g++编译,__cplusplus的值是long int类型的,值表示当前编译程序的C++编译器的版本号。#include <stdio.h>int main(void){ printf("%ld\n",__cplusplus); return 0;}编译:g++ test原创 2021-11-29 20:30:06 · 2043 阅读 · 0 评论 -
C++学习笔记1 - namespace命名空间
1、命名空间的引入命名空间namespace,是C++引入的一种解决全局变量和函数名冲突的机制。C语言没有namespace,但是C++及之后的Java、Python等语言都有。namespace的关键点有2个:一是如何解决名称冲突,二是如何合法访问变量。2、C语言如何解决名称冲突大项目中会有很多C文件,全局变量和函数都是extern链接属性,因此名称冲突是客观存在的。一个项目是一个单体程序,项目中的全局变量和函数理应能互相访问,因此名称冲突是客观存在的。C语言中解决名称冲突的办法是:第一,原创 2021-11-19 20:42:40 · 926 阅读 · 0 评论