c++
Kobe51920
这个作者很懒,什么都没留下…
展开
-
c++:强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下三个缺点。1) 没有从...原创 2020-01-09 14:05:25 · 264 阅读 · 0 评论 -
c++: auto和decltype关键字
可以用 auto 关键字定义变量,编译器会自动判断变量的类型。例如:auto i =100; // i 是 int auto p = new A(); // p 是 A* auto k = 34343LL; // k 是 long long有时,变量的类型名特别长,使用 auto 就会很方便。例如:map <string, int, greater <string...原创 2020-01-09 14:33:47 · 168 阅读 · 0 评论 -
c++:class与struct的区别
c++中的struct是对c语言中的struct进行的扩充c++中的struct可实现以下功能:能继承 能多态 能包含成员函数class与struct的区别如下:默认的继承访问权限。struct是public的,class是private的。struct A{char a;};struct B : A{...转载 2020-01-10 21:00:01 · 178 阅读 · 0 评论 -
c++:右值引用
能出现在赋值号左边的表达式称为“左值”,不能出现在赋值号左边的表达式称为“右值”。一般来说,左值是可以取地址的,右值则不可以。非 const 的变量都是左值。函数调用的返回值若不是引用,则该函数调用就是右值。前面所学的“引用”都是引用变量的,而变量是左值,因此它们都是“左值引用”。C++11 新增了一种引用,可以引用右值,因而称为“右值引用”。无名的临时变量不能出现在赋值号左边,因而是右值。右值...原创 2020-01-09 14:24:13 · 224 阅读 · 0 评论 -
c++:Lambda表达式(匿名函数)详解
使用STL时,往往会大量用到函数对象,为此要编写很多函数对象类。有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费。而且,定义函数对象类的地方和使用函数对象的地方可能相隔较远,看到函数对象,想要查看其 operator() 成员函数到底是做什么的也会比较麻烦。对于只使用一次的函数对象类,能否直接在使用它的地方定义呢?Lambda 表达式能够解决这个...原创 2020-01-09 15:24:08 · 441 阅读 · 0 评论 -
c++06:函数
1.函数基础通过调用运算符来执行函数。调用运算符是一对括号,是一个用逗号隔开的实参列表,用实参来初始化函数的形参,调用类型与函数类型一样。2.函数调用1.用实参初始化函数的形参2.将控制权转移给被调用函数3.局部对象1.局部变量:形参和函数体内部定义的变量2.函数体外被定义的对象存在于程序的整个执行过程中3.自动对象:只在块执行期间的对象,当块执行结束后,块中的自动对象变成未定...原创 2020-01-30 13:12:35 · 167 阅读 · 0 评论 -
c++:智能指针(unique_ptr)
unique_ptr介绍:unique_ptr是一种定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权unique是独特的、唯一的意思,故名思议,unique_ptr可以“独占”地拥有它所指向的对象,它提供一种严格意义上的所有权。这一点和我们前面介绍的shared_ptr类型指针有很大的不同:shared_ptr允许多个指针指向同一对象,而u...原创 2020-01-15 22:11:19 · 334 阅读 · 0 评论 -
c++:智能指针shared_ptr
先前的文章我们讲过了智能指针的概念等一系列问题,下面我们直接来看智能指针1.带有引用计数的智能指针 (Shared_ptr)同时也是强智能指针所谓的引用计数,就是有多少个智能指针对象管理这个堆内存。引用计数的作用是做所有对象共享的。不可以写为普通的成员变量,要写成静态的成员变量我们用一个引用计数管理器来实现Shared_ptr智能指针:设计思路:将引用计数管理器设计...原创 2020-01-30 13:10:02 · 306 阅读 · 0 评论 -
c++:智能指针(weak_ptr)
1.weak_ptr到底是什么?简单的说就是weak_ptr是shared_ptr的一个助手,是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。不论是否有weak_ptr指向,一旦最后一个指向对象的shared_ptr被销毁,...原创 2020-01-15 19:46:45 · 298 阅读 · 0 评论 -
c++:智能指针(1)
1.原始指针和内存问题在C++中一般在构造函数中进行资源申请,在析构函数中进行资源释放,在C语言中有可能在某函数内部进行资源申请,在函数调用处进行资源释放,资源的申请和释放不在同一处非常容易产生内存泄漏问题。c++内存会出现问题:缓冲区溢出(buffer overrun) 空悬指针/野指针(dangling pointer/wild pointer) 重复释放(double del...原创 2020-01-04 15:37:23 · 186 阅读 · 0 评论 -
c++:联编,虚函数工作原理,RTTLI运行时类型识别
联编:将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。联编种类:静态联编 动态联编静态联编:在编译过程中进行联编被称为静态联编动态联编:编译器必须能够在程序运行时选择正确的虚函数的代码,这被称为动态联编虚函数和动态联编虚函数:主要是实现了多态的机制多态:用基类型别的指针指向其派生类的实例,然后通过基类的指针调用实际派生类的成员函数(基类指针可...原创 2019-12-18 15:16:01 · 240 阅读 · 0 评论 -
c++:STL之顺序容器,关联容器,顺序容器适配器
1.什么是STLSTL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件...原创 2019-12-22 22:20:41 · 1818 阅读 · 0 评论 -
c++:容器&顺序配置器
1.容器的概念容器是保存一组给定类型对象的类型。每个标准类型都是一个模版类型。为了定义一个容器,我们必须指定保存在容器中的元素的类型。除了array之外,标准库容器都是大小可变的2.容器的分类容器分为两类: (1)关联容器 (2)顺序容器顺序容器:保存相同类型对象有序集合的类型。顺序容器中的元素通过位置来访问关联容器:元素的位置由相关联的关键字值决定的。也就是所关联容器中元素...转载 2019-12-06 10:37:45 · 153 阅读 · 1 评论 -
c++:继承(4)虚继承&虚基类
1.虚基类:虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在派生类中存在多份拷贝。这将存在两个问题:浪费存储空间 存在二义性问题。通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚基类使得从多个类(它们的基类相同)派生出的对象...原创 2020-01-09 13:23:05 · 485 阅读 · 0 评论 -
c++:继承(3)
1.纯虚函数:纯虚函数是一种特殊的虚函数,在基类中无法对虚函数给出有意义的实现,所以就叫做纯虚函数。纯虚函数的作用:它的实现留给基类的派生类去做。格式:class <类名>{ virtual<类型><函数名>(参数列表) = 0; ....};纯虚函数可以让类先具有一个操作名称,而没有操作内容,而后在基类的派生类中给出定义引...原创 2019-12-13 13:21:54 · 168 阅读 · 0 评论 -
c++:继承(2):同名函数的关系&派生类的构造和析构顺序&基类和派生类的相互指向
1.同名函数的关系:重载 隐藏 覆盖重载:重载是指在同一作用域下的同名函数具有不同的参数列表。在同一访问区域内声明的几个具有不同参数列表(参数的类型、个数、顺序不同)的同名函数,程序会根据不同的参数列表来确定具体调用哪个函数。 对于重载函数的调用,编译期间确定,属于静态联编,它们的地址在编译期间就绑定了 重载不关心函数的返回值类型函数重载的特征:相同的作用域 函数名相...原创 2019-12-11 14:56:09 · 858 阅读 · 0 评论 -
c++:继承(1)
继承:1.何为继承:继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类...原创 2019-12-08 13:41:04 · 955 阅读 · 0 评论 -
c++:new与malloc实现对象池&通用内存池
1.使用对象池的原因:当我们需要,多次使用new和delete操作向系统申请和释放堆空间会使得我们的程序进程的开销变得非常的大而且效率也非常低所以我们可以通过重载new和delete构建一个对象池,来帮助我们提高自己程序的效率和减少不必要的开销。2.new与malloc实现对象池const int POOL_SIZE = 11;// 对象池的初始个数template<type...原创 2019-12-08 11:16:48 · 372 阅读 · 0 评论 -
c++:3.8运算符重载
1.运算符重载:运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下:<返回类型说明符> operator <运算符符号>(<参数表>){ <函数体>...原创 2019-12-02 18:04:07 · 290 阅读 · 0 评论 -
c++:3.7迭代器(1)
1.写时拷贝1.写前原创 2019-12-05 23:44:53 · 196 阅读 · 0 评论 -
c++:3.5&3.6函数模版与类模版
(1).函数模版函数模版//<>模版类型的参数列表//模版无法使用//定义点:编译模版头部//模版所有不编译//调用点:函数体//模版处理:编译阶段template<typaname T>T sum(T a,T b){ std::cout << typeid(T).name() << std::endl return ...原创 2019-12-02 16:25:36 · 175 阅读 · 0 评论 -
c++:3.4类和对象4(总结)
1.oop思想2.三大特性:封装:继承:多态:3.三个访问修饰符4.析构函数与构造函数两个函数的作用两个函数的特性5.this指针指向对象的内存6.拷贝构造函数,运算符重载函数7.对象的生存周期8.构造函数的初始化列表9.static,const修饰的成员10.形参使用引用的优缺点11.类类型的返回值12. .* ,->*;...原创 2019-12-31 13:58:32 · 244 阅读 · 0 评论 -
c++:3.3类和对象3_类的生存周期和初始化列表
1.构造函数的初始化列表Class Test {public:Test(int a = 10) :ma(a)//初始化列表(成员变量的初始化){ //ma=a;赋值}private:int ma;}:int maiin(){return 0;}原创 2019-11-20 17:12:41 · 152 阅读 · 0 评论 -
c++:3.2类成员方法&初始化列表
1.初始化列表中的执行顺序只和成员变量的声明顺序有关class Test {public: Test(int a,int b) :mb(ma) , ma(a) {}void show(){cout <<"ma:" << ma <<endl;cout <<"mb:" << ma <<endl;}priv...原创 2019-11-20 14:57:27 · 166 阅读 · 0 评论 -
c++:3.2类返回值
1.返回方式:C语言:(1) <=4. eax(2). >4. <8 eat. edx(3) >8 临时量c++类:(1)其它类型(除类以外的)(2)类类型:不管是几个字节,都是临时对象带回来的自定义类型:用引用,减少函数调用实参传形参是初始化Test& getObject(Test lhs)//第三个对象{Test temp;//第...原创 2019-11-11 20:07:22 · 452 阅读 · 0 评论 -
c++:3.1类和对象_默认的函数+this指针
1.构造函数作用:初始化对象的内存空间class CGoods{public://构造函数(无返回值)CGoods(char *name, float price, int amount){ //字符串初始化时要开辟新的内存(new),在用strcpy函数赋值 //+1('\0') mname = new char[strlen(name) + 1](); ...原创 2019-11-06 22:12:56 · 262 阅读 · 0 评论 -
c++:2.2inline_引用_const
1.inline函数作用:在函数调用点直接代码展开处理阶段:编译阶段问题:(1)宏与inline函数有怎么的区别?宏 文本替换。 没安全检查。 没类型检查 不安全inline函数。 安全检查。 类型检查。 安全(一种更安全的宏)(2)inline函数的优点:没函数的开栈与清栈的过程。 效率高普通函数:要开栈 清栈(3)in...原创 2019-11-08 21:27:55 · 171 阅读 · 0 评论