C++
文章平均质量分 94
快速掌握C++入门基础知识并可以简单的使用
一杆梅子酒丶
这个作者很懒,什么都没留下…
展开
-
C++的类型转换
C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换。隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败显式类型转化:需要用户自己处理void Test1(){ int i = 1; double d = 8.88; //c语言支持相近类型的隐式类型转换(相近类型,也就是意义相似的类型) i = d; cout &原创 2020-09-11 09:35:50 · 766 阅读 · 0 评论 -
RAII:智能指针
为什么需要智能指针?下面我们先分析一下下面这段程序有没有什么内存方面的问题?int div(){ int a, b; cin >> a >> b; if (b == 0) { throw invalid_argument("除0错误"); } return a / b;}void f1(){ int* p = new int; try { cout <<原创 2020-09-06 20:06:49 · 244 阅读 · 0 评论 -
异常
C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误。C 标准库中setjmp和longjmp组合。这个不是很常用。实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。C++异常概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,原创 2020-09-02 13:53:13 · 147 阅读 · 0 评论 -
线程库(C++11)
thread类的简单介绍在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。C++11中线程类构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数 Fn,args1,args2,…为线程函数的参原创 2020-08-30 11:00:02 · 837 阅读 · 0 评论 -
右值引用(C++11)
C++98中提出了引用的概念,引用即别名,引用变量与其引用实体共用同一块内存空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}int main(){ int a = 10; int b = 20; Swap(a, b); return 0;}为了提高程序运行效率,C++11中引入了右原创 2020-08-27 22:13:55 · 839 阅读 · 0 评论 -
lambda表达式(C++11)
C++98中的一个例子在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。#include <algorithm>#include <functional>int main(){ int array[] = { 4,1,8,5,3,7,0,9,2,6 }; // 默认按照小于比较,排出来结果是升序 std::sort(array, array + sizeof(array) / sizeof(array[0])); // 如果原创 2020-08-23 00:06:09 · 466 阅读 · 0 评论 -
哈希的应用:位图和布隆过滤器
位图首先我们来看一道腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。那么你会想到哪些解决方法呢?遍历,时间复杂度 O(N)排序 O(N * logN),利用二分查找 O(logN)上面两种方法真的可以解决吗?40亿个不重复的无符号整数在内存中占多大空间呢?232大概是42亿,4G空间大小,一个整数占4个字节,那就是16G的空间大小,实际上我们电脑的内存没有这么大。那是否可以采用哈希进行映射处理呢?可以开232个空间,对所有原创 2020-08-19 12:32:02 · 230 阅读 · 0 评论 -
C++面向对象三大特性之一:多态(超详细讲解)
多态的概念通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。即同一事物,在不同场景下表现出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。再举个栗子: 最近为了争夺在线支付市场,支付宝年底经常会做诱人的扫红包-支付-给奖励金的活动。那么大家想想为什么有人扫的红包又大又新鲜8块、10块…,而有人扫的红包都是1毛,5毛…。其实这背后也是一个多态行为。支付宝首先会分析你的账户数据,比如你是新用户、比如你原创 2020-07-12 14:43:30 · 670 阅读 · 0 评论 -
C++面向对象三大特性之一:继承(超详细讲解)
目录: 继承的定义 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 &nbs原创 2020-07-07 13:39:40 · 766 阅读 · 0 评论 -
C++模板简介与使用
模板的出现意味着STL的诞生。目录: 函数模板 类模板 类型模板参数 非类型模板参数 &n原创 2020-07-02 11:33:34 · 176 阅读 · 0 评论 -
C/C++内存管理详解
C/C++内存分布栈又叫堆栈,存储非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。数据段:存储全局数据和静态数据。代码段:存储可执行的代码/只读常量。传统的C内存管理方式malloc:向内存申请一块连续可用的空间,并返回指向这块空间的指针void* malloc(size_t size);1.如果开辟成功,则返回一个指向开原创 2020-07-02 00:45:35 · 180 阅读 · 0 评论 -
C++初始化列表详解
目录: 定义 使用初始化列表的原因 必须使用初始化列表的时候 成员变量的顺序定义与其他函数不同,构造函数除了有名字,参数列表原创 2020-07-01 12:21:32 · 1438 阅读 · 0 评论 -
常见的const应用
const定义变量const定义变量后,该变量就没有了写权限,只有读权限1.const用于定义变量时,要进行初始化例如:const int a = 10; //合法const int a; //非法2.数据类型对于const而言是透明的例如:const int a = 10; 等价于 int const a = 10;const int* p1 = &a; 等价于 int const* p1 = &a;但是这里要注意const int* p1 = &a; 不等价原创 2020-06-30 21:12:10 · 165 阅读 · 0 评论 -
C++突破封装:友元和内部类
首先来看一个问题,有时候当我们想要重载实现原创 2020-06-30 19:57:22 · 123 阅读 · 0 评论 -
this指针存在的意义
首先,我们先来看一个Date类:#include <iostream>using namespace std;class Date{public: void Init(int year, int month, int day) { _year = year; _month = month; _day = day; } void Print() { cout << _y原创 2020-06-29 18:42:14 · 1840 阅读 · 0 评论 -
轻松掌握static成员
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化。静态成员为所有类对象所共享,不属于某个具体的对象静态成员变量必须在类外定义,定义时不添加static关键字静态成员函数没有隐藏的this指针,不能访问任何非静态成员小问题:实现一个类,计算程序中创建出了多少个类对象。#include <iostream>using namespace std;c原创 2020-06-29 19:04:12 · 166 阅读 · 0 评论 -
类的6个默认成员函数:构造、析构、拷贝构造、赋值重载、取地址重载
如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数:但是一般我们常用的只有前四个:构造函数、析构函数、拷贝构造、赋值重载构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。如果用户没有显示定义构造函数,C++编译器会自动生成一个无参的默认构造函数;若用户显示定义,则编译器不再自动生成。三种默认构造函数:无参原创 2020-06-29 01:02:38 · 387 阅读 · 0 评论 -
C++入门小基础
众所周知,c++是一门面向对象的语言,不同于c的面向过程。在学习时,首先我们要懂得一些基础入门知识。命名空间在c/c++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是解决这种问题的。c++有一套自己的命名空间std,很多东西的使用都离不开它。在编写c++代码时,常见的写法如下:#include<iostr原创 2020-06-28 20:35:15 · 336 阅读 · 0 评论