自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(52)
  • 收藏
  • 关注

转载 c语言中的字符串

字符串是有序字符的集合字符串是程序中的基本元素之一c语言中没有字符串的概念  c语言中通过特殊的字符数组模拟字符串  c语言中的字符串是以‘\0’结尾的字符数组在c语言中,双引号引用的单个或多个字符是一种特殊的字面量  存储于程序的全局只读存储区  本质为字符数组,编译器自动在结尾加上‘\0’字符字符串的定义char sa[] = {'w','\...

2018-06-27 00:39:00 134

转载 指针和数组

数组是一段连续的内存空间数组空间大小为sizeof(array_type)*array_size数组名可看作指向数组第一个元素的常量指针当指针p指向一个同类型的数组的元素时:p+1将指向当前元素的下一个元素;p-1将指向当前元素的上一个元素。指针之间只支持减法运算参与减法运算的指针类型必须相同注意:1.只有当两个指针指向同一个数组中的元素时,...

2018-06-27 00:24:00 103

转载 数组的本质分析

数组是相同类型的变量的有序集合数组在一片连续的内存空间中存储元素数组元素的个数可以显示或隐式指定int a[5] = {1,2};int b[] = {1,2};数组名代表数组首元素的地址数组的地址需要取地址符&才能得到数组首元素的地址与数组的地址值相同数组首元素的地址与数组的地址是两个不同的概念数组名可以看作一个常量指针...

2018-06-27 00:03:00 128

转载 指针的本质分析

*号的意义在指针声明时,*号表示所声明的变量为指针在指针使用时,*号表示取指针所指向的内存空间中的值指针是变量,因此可以声明指针参数当一个函数体内部需要改变实参的值,则需要使用指针参数函数调用时实参值将复制到形参指针适用于复杂数据类型作为参数的函数中const int* p;  //p可变,p指向的内容不可变int const* p;  //p...

2018-06-26 22:53:00 90

转载 经典问题解析五

c+++中任然支持c语言中的可变参数函数c++编译器的匹配调用优先级1.重载函数2.函数模板3.变参函数存在的缺陷:变参函数无法解析对象参数,可能造成程序崩溃进一步的挑战:如何让编译器精确匹配函数,但不进行实际的调用?(sizeof)构造中的异常构造函数抛出异常  构造过程立即停止  当前对象无法生成  析构函数不会被调用...

2018-06-26 00:33:00 80

转载 c++中的类型识别

基类指针指向子类对象基类引用成为子类对象的别名静态类型-变量(对象)自身的类型动态类型-指针(引用)所指向对象的实际类型基类指针是否可以强制类型转换为子类指针取决于动态类型!c++中如何得到动态类型?解决方案-利用多态1.在基类中定义虚函数返回具体的类型信息2.所有的派生类都必须实现相关的虚函数3.每个类中的类型虚函数都需要不同的实现...

2018-06-26 00:15:00 114

转载 c++中的异常处理

异常的概念程序在运行过程中可能产生异常异常(Exception)与Bug的区别  异常是程序运行时可预料的执行分支  Bug是程序中的错误,是不被预期的运行方式异常(Exception)和Bug的对比异常  运行时产生除0的情况  需要打开的外部文件不存在  数组访问时越界Bug  使用野指针  堆数组使用后未释放  选择排序无法...

2018-06-23 00:30:00 70

转载 单例类模板

单例模式需求的提出在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)如何定义一个类,使得这个类最多只能创建一个对象?要控制类的对象数目,必须对外隐藏构造函数思路:将构造函数的访问属性设置为private定义instance并初始化为NULL当需要使用对象时,访问instance的值  空值:...

2018-06-22 23:49:00 59

转载 智能指针类模板

智能指针的意义现代c++开发库中最重要的类模板之一c++中自动内存管理的主要手段能够在很大程度上避开内存相关的问题STL中的智能指针auto_ptr  生命周期结束时,销毁指向的内存空间  不能指向堆数组,只能指向堆对象(变量)  一片堆空间只属于一个智能指针对象  多个智能指针对象不能指向同一片堆空间STL中的其它智能指针shared...

2018-06-22 23:28:00 76

转载 数组类模板

模板参数可以是数值型参数(非类型参数)template<typename T, int N>void func(){  T a[N];  //使用模板参数定义局部数组}func<double, 10>();数值型模板参数的限制  变量不能作为模板参数  浮点数不能作为模板参数  类对象不能作为模板参数本质...

2018-06-22 01:27:00 94

转载 类模板深度剖析

类模板可以定义任意多个不同的类型参数类模板可以被特化  指定类模板的特定实现  部分类型参数必须显示指定  根据类型参数分开实现类模板类模板的特化类型  部分特化-用特定规则约束类型参数  完全特化-完全显示指定类型参数类模板特化注意事项  特化只是模板的分开实现    本质上是同一个类模板  特化类模板的使用方式是统一的...

2018-06-22 01:15:00 71

转载 深入理解函数模版

函数模版深入理解  编译器从函数模版通过具体类型产生不同的函数  编译器会对函数模版进行两次编译    对模版代码本身进行编译    对参数替换后的代码进行编译注意事项:  函数模版本身不允许隐式类型转换    自动推导类型时,必须严格匹配    显示类型指定时,能够进行隐式类型转换函数模版可以定义任意多个不同的类型参数template...

2018-06-22 00:31:00 75

转载 函数模版的概念和意义

定义宏代码块优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用c++中的泛型编程  函数模版    一种特殊的函数可用不同类型进行调用    看起来和普通函数很相似,区别是类型可被参数化    template<typename...

2018-06-22 00:13:00 164

转载 经典问题解析四

new关键字与malloc函数的区别new关键字是c++的一部分malloc是由c库提供的函数new以具体类型为单位进行内存分配malloc以字节为单位进行内存分配new在申请内存空间时可进行初始化malloc仅根据需要申请定量的内存空间构造函数不可能成为虚函数  在构造函数执行结束后,虚函数表指针才会正确的初始化析构函数可以成为虚函数  建...

2018-06-21 23:49:00 59

转载 被遗弃的多重继承

c++支持编写多重继承的代码一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承所有父类的成员函数子类对象可以当作任意父类对象使用多重继承的问题一通过多重继承得到的对象可能拥有“不同的地址”!!解决方案:无多重继承的问题二多重继承可能产生冗余的成员当多重继承关系出现闭合时将产生数据冗余的问题!!!解决方案:虚继承虚继...

2018-06-08 02:16:00 62

转载 c++中的抽象类和接口

面向对象中的抽象类可用于表示现实世界中的抽象概念是一种只能定义类型,而不能产生对象的类只能被继承并重写相关函数直接特征是相关函数没有完整的实现c++语言中没有抽象类的概念c++中通过纯虚函数实现抽象类纯虚函数是指只定义原型的成员函数一个c++类中存在纯虚函数就成为了抽象类抽象类只能用作父类被继承子类必须实现纯虚函数的具体功能纯虚函数...

2018-06-08 01:35:00 76

转载 c++对象模型分析

class是一种特殊的struct在内存中class依旧可以看作变量的集合class与struct遵循相同的内存对齐规则class中的成员函数与成员变量是分开存放的 每个对象有独立的成员变量 所有对象共享类中的成员函数运行时的对象退化为结构体的形式所有成员变量在内存中依次排布成员变量间可能存在内存空隙可以通过内存地址直接访问成员变量...

2018-06-08 01:19:00 93

转载 多态的概念和意义

函数重写回顾父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数面向对象中期望的行为根据实际的对象类型判断如何调用重写函数父类指针(引用)指向父类对象则调用父类中定义的函数子类对象则调用子类中定义的重写函数面向对象中多态的概念根据实际的对象类型决定函数调用的具体目标同样的...

2018-06-08 00:51:00 235

转载 父子间的冲突

子类可以定义父类中的同名成员子类中的成员将隐藏父类中的同名成员父类中的同名成员依然存在于子类中通过作用域分辨符(::)访问父类中的同名成员 c.Parent::mi类中的成员函数可以进行重载1.重载函数的本质为多个不同的函数2.函数名和参数列表是唯一的标识3.函数重载必须发生在同一个作用域中子类中的函数将隐藏父类的同名函数子类无法重载父类中...

2018-06-08 00:34:00 83

转载 继承

重要规则:子类就是一个特殊的父类子类对象可以直接初始化父类对象子类对象可以直接赋值给父类对象继承中的访问级别面向对象中的访问级别不只是public和private可以定义protected访问级别关键字protected的意义修饰的成员不能被外界直接访问修饰的成员可以被子类直接访问不同的继承方式c++中支持三种不同的继承方式pu...

2018-05-31 23:55:00 66

转载 类型转换函数

标准数据类型之间会进行隐式的类型安全转换转换规则如下char ->shortchar/short ->int ->unsigned int -> long ->unsigned long ->float ->doublechar+short -> int再论构造函数构造函数可以定义不同类型的参数参数满足下列...

2018-05-30 01:27:00 144

转载 经典问题解析三

编译器为每个类默认重载了赋值操作符默认的赋值操作符仅完成浅拷贝当需要进行深拷贝时必须重载赋值操作符赋值操作符与拷贝构造函数有相同的存在意义Test& operator = (const Test& obj){  if (this != obj)  {    delete m_pointer;    m_pointer = new ...

2018-05-29 01:01:00 59

转载 函数调用操作符

函数调用操作符( ( ) )只能通过类的成员函数重载可以定义不同参数的多个重载函数函数对象用于在工程中取代函数指针int operator () (){  int ret = a1;  a1 = a0 + a1;  a0 = ret;  return ret;}Test t;t();转载于:https://www.cnblo...

2018-05-29 00:42:00 686

转载 数组操作符的重载

数组访问操作符( [ ] )只能通过类的成员函数重载重载函数能且仅能使用一个参数可以定义不同参数的多个重载函数转载于:https://www.cnblogs.com/sugarWill666/p/9103061.html...

2018-05-29 00:31:00 81

转载 c++中的字符串类

字符串与数字的转换标准库中提供了相关的类对字符串和数字进行转换字符串流类(sstream)用于string的转换<sstream>-相关头文件istringstream-字符串输入流ostringstream-字符串输出流使用方法string -> 数字istringstream iss("123.45");double num...

2018-05-29 00:23:00 61

转载 初探c++标准库

c++标准库c++标准库并不是c++语言的一部分c++标准库是由类库和函数库组成的集合c++标准库中定义的类和对象都位于std命名空间中c++标准库的头文件都不带.h后缀c++标准库涵盖了c库的功能小结c++标准库是由类库和函数库组成的集合c++标准库包含经典算法和数据结构的实现c++标准库涵盖了c库的功能c++标准库位于std命名空间中...

2018-05-23 00:34:00 86

转载 操作符重载的概念

操作符重载c++中的重载能够扩展操作符的功能操作符的重载以函数的方式进行本质:用特殊形式的函数扩展操作符的功能通过operator关键字可以定义特殊的函数operator的本质是通过函数重载操作符语法:Type operator Sign(const Type p1, const Type p2){  Type ret;  return ...

2018-05-23 00:17:00 119

转载 类中的函数重载

函数重载回顾函数重载的本质为相互独立的不同函数c++中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中类中的成员函数可以进行重载构造函数的重载普通成员函数的重载静态成员函数的重载问题:全局函数,普通成员函数以及静态成员函数之间是否可以构成重载?作用域不一样,不可以。普通成员函数以...

2018-05-23 00:00:00 83

转载 友元的尴尬能力

友元的概念友元是c++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系时单项的,不能传递友元的函数在类中以friend关键字声明友元类的友元可以是其它类或者具体函数友元不是类的一部分友元不受类中访问级别的限制友元可以直接访问具体类的所有成员友元是为了兼顾c语言的高效而诞生的友元直接破坏了面向对象的封装性友元在实际产品...

2018-05-22 22:48:00 48

转载 二阶构造模式

构造函数只提供自动初始化成员变量的机会不能保证初始化逻辑一定成功执行return语句后构造函数立即结束半成品对象的概念初始化操作不能按照预期完成而得到的对象半成品对象是合法的c++对象,也是Bug的重要来源二阶构造示例一class TwoPhaseCons {private:  TwoPhaseCons() {  //第一阶段构造函数...

2018-05-22 22:29:00 54

转载 类的静态成员函数

在c++中可以定义静态成员函数静态成员函数是类中特殊的成员函数静态成员函数属于整个类所有可以通过类名直接访问公有静态成员函数可以通过对象名访问公有静态成员函数小结静态成员函数时类中特殊的成员函数静态成员函数没有隐藏的this参数静态成员函数成员函数可以通过类名直接访问静态成员函数只能直接访问静态成员变量(函数)转载于:https://www....

2018-05-22 22:07:00 55

转载 类的静态成员变量

在c++中可以定义静态成员变量静态成员变量属于整个类所有静态成员变量的生命周期不依赖于任何对象可以通过类名直接访问公有静态成员变量所有对象共享类的静态成员变量可以通过对象名访问公有静态成员变量静态成员变量静态成员变量的特性在定义时直接通过static关键字修饰静态成员变量需要在类外单独分配空间(类外定义)静态成员变量在程序内部位于全局数据区...

2018-05-22 21:54:00 82

转载 经典问题解析2

关于析构的疑问单个对象创建时构造函数的调用顺序1.调用父类的构造过程2.调用成员变量的构造函数(调用顺序与声明顺序相同)3.调用类自身的构造函数析构函数与对应构造函数的调用顺序相反。关于析构的答案对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象最先析构!!堆对象的析构发生在使用delete的时候,与delete的使用顺序相关!关...

2018-05-22 01:43:00 71

转载 神秘的临时对象

思考构造函数是一个特殊的函数是否可以直接调用?是否可以在构造函数中调用构造函数?直接调用构造函数的行为是什么?答案直接调用构造函数将产生一个临时对象临时对象的生命周期只有一条语句的时间临时对象的作用域只在一条语句中临时对象是c++中值得警惕的灰色地带小结直接调用构造函数将产生一个临时对象临时对象时性能的瓶颈,也是bug的来源之一现...

2018-05-22 01:23:00 54

转载 对象的构造顺序

对于局部对象当程序执行流到达对象的定义语句时进行构造对于堆对象当程序执行流到达new语句时创建对象使用new创建对象将自动触发构造函数的调用对于全局对象对象的构造顺序是不确定的不同的编译器使用不同的规则确定构造顺序转载于:https://www.cnblogs.com/sugarWill666/p/9070140.html...

2018-05-22 01:06:00 65

转载 初始化列表的使用

类成员的初始化注意事项成员的初始化顺序与成员的声明顺序相同成员的初始化顺序与初始化列表中的位置无关初始化列表先于构造函数的函数体执行类中的const成员类中的const成员会被分配空间的类中的const成员的本质是只读变量类中的const成员只能在初始化列表中指定初始值编译器无法直接得到const成员的初始值,因此无法进入符号表成为真正意义上的常...

2018-05-22 00:51:00 181

转载 对象的构造

对象的初始化从程序设计的角度,对象只是变量,因此:在栈上创建对象时,成员变量初始为随机值在堆上创建对象时,成员变量初始为随机值在静态存储区创建对象时,成员变量初始为0值小结每个对象在使用之前都应该初始化类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用带有参数的构造函数  构造函数可以根据需要定...

2018-05-20 20:50:00 59

转载 类的真正形态

类的关键字struct在c语言中已经有了自己的含义,必须继续兼容在c++中提供了新的关键字class用于类定义class和struct的用法时完全相同的class和struct有什么区别?在用struct定义类时,所有成员的默认访问级别为public在用class定义类时,所有成员的默认访问级别为private转载于:https://www.cnblog...

2018-05-20 20:22:00 61

转载 类与封装的概念

类通常分为以下两个部分  类的实现细节  类的使用方式类的封装当使用类是,不需要关心其实现细节当创建类时,才需要考虑其内部实现细节c++中类的封装成员变量:c++中用于表示类属性的变量成员函数:c++中用于表示类行为的函数c++中可以给成员变量和成员函数定义访问级别  public  成员变量和成员函数可以在类的内部和外界访问和调用...

2018-05-20 18:54:00 110

转载 进阶面向对象下

类之间的基本关系继承  从已存在类细分出来的类和原类之间具有继承关系(is-a)  继承的类(子类)拥有原类(父类)的所有属性和行为组合  一些类的存在必须依赖于其它的类,这种关系叫组合  组合的类在某一局部上由其它的类组成小结类之间可以存在继承关系或组合关系继承关系中子类拥有父类的的一切属性和行为组合关系是类之间整体和部分的关系类及类之...

2018-05-20 18:40:00 48

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除