
C++
文章平均质量分 71
C++学习笔记
攻城lion
这个作者很懒,什么都没留下…
展开
-
C++实现动态类型std::any
自己实现一个简易的C++动态类型Any原创 2023-04-06 09:49:51 · 484 阅读 · 0 评论 -
C++的new、operator new、placement new
C++的new、operator new、placement new原创 2023-04-01 23:10:23 · 346 阅读 · 0 评论 -
C++11学习笔记
申明: 这是 C++2.0(C++11 和 C++14) 新特性的笔记,来自于观看过的一些视频教程、网上博文和C++方面的书籍,可能还缺少一些知识,这里只是对现阶段本人所掌握的知识进行整理归纳,日后还会补充。笔记里的 ctor是构造函数,dctor是析构函数一、C++版本及一些学习网站1.1 C++ Standard(规格)的演化C++98 1.0版本C++03 TR1C++11 2.0版本C++14 2.0版本C++2.0新特性包原创 2020-10-25 20:59:10 · 2072 阅读 · 5 评论 -
三、继承性3.1-3.2类与类之间的关系和继承的定义
3.1、类与类之间的关系has-A, uses-A 和 is-Ahas-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。 <对象与对象之间的关系,父对象——>子对象>uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 <类与对象>...原创 2019-09-12 14:38:27 · 399 阅读 · 0 评论 -
3.3-3.4派生类(子类)成员的标识和访问和基类与派生类的关系
2.3、派生类(子类)成员的标识和访问publicprotectedprivate公有继承(public)publicprotected不可见保护继承(protected)protectedprotected不可见私有继承(private)privateprivate不可见**公有继承(public)**当类的继承方式为公有继承时,基...原创 2019-09-12 14:45:00 · 218 阅读 · 0 评论 -
3.5派生类的构造函数和析构函数
2.5、派生类的构造函数和析构函数1>基类的构造函数不能被继承。派生类构造函数的工作对自己的数据成员进行初始化。负责调用基类构造函数使基类的数据成员得以初始化。调用子对象的构造函数,对派生类中的子对象进行初始化。若某项的参数表为空,则该项可从成员初始化列表中省略,表示使用缺省构造函数初始化该类子对象。类的数据成员可以是某个其它类的对象,该对象称为子对象。当...原创 2019-09-12 14:46:33 · 170 阅读 · 0 评论 -
3.6-3.8函数隐藏、兼容规则和多继承与二义性问题
3.6、函数隐藏当基类(Y)与派生类(X)中都存在同名函数fun( )时,当基类调用时默认调用派生类的fun();若想调用基类的fun( ) ,则应该是:X m(用父类定义一个对象) m. X:: fun( )。3.7、类型兼容规则和赋值兼容性规则1> 类型兼容规则中所指的替代包括以下情况:子类对象可以当作父类对象使用。子类对象可以直接赋值给父类对象。子类对象可以直接初...原创 2019-09-12 14:49:22 · 233 阅读 · 0 评论 -
4.1-4.2多态性的说明和实现(联编)
4.1、多态性说明多态性:发出同样的消息被不同类型的对象接收导致完全不同的行为。多态性表现为以下几种形式:重载多态:通过调用相同名字的函数,表现出不同的行为。运算符重载也是一种重载多态。运行多态:通过基类的指针,调用不同派生类的同名函数,表现出不同的行为。模板多态,也称为参数多态:通过一个模板,得到不同的函数或不同的类。4.2、多态的实现:联编联编:确定具有多态性的语句...原创 2019-09-12 21:26:26 · 229 阅读 · 0 评论 -
4.3-4.5虚函数及实现机制和限制
4.3、虚函数虚函数又叫:运行时的多态性、动态联编、动态绑定和动态束定。说明方法:virtual<类型说明符><函数名>(<参数表>)优势:使用这些类的程序无须区分函数是在基类还是在派生类中定义的。在基类的函数的前面加上virtual关键字,那么所有的派生类都自动加上virtual关键字,故派生类的virtual关键字可以省略。4.4、虚函数的实...原创 2019-09-12 21:29:49 · 185 阅读 · 0 评论 -
4.6-4.7虚析构函数、纯虚函数和抽象类的介绍
4.6、虚析构函数虚析构函数:在析构函数前加关键字virtual进行说明。目的:使用delete运算符删除一个对象时,能保证析构函数被正确地执行。格式:class<类名>{virtual <类型><函数名>(<参数表>)=0;……} ;4.7、纯虚函数和抽象类4.7.1、纯虚函数格式:class<类名>{v...原创 2019-09-12 21:31:47 · 185 阅读 · 0 评论 -
4.8-4.8 多路继承和多态例子
4.8、多路径继承4.8.1、虚继承的引用和说明引入目的:解决多路径继承而引起的二义性问题。格式:virtual<继承方式><基类名>关键字说明:virtual 与关键字public或private的相对位置无关,但必须位于虚类名之前,且virtual只对紧随其后的基类名起作用。4.8.2、虚基类的构造函数虚基类构造函数必须只被调用一次,目的是要保...原创 2019-09-12 21:36:20 · 181 阅读 · 0 评论 -
2.9、static在C++中的用法
2.9、static在C++中的用法2.9.1、static在C++中的总结静态全局变量:作用范围局限于它的源文件。即只有本文件内的代码才可以访问它,变量名在其它文件中不可见。静态局部变量:局限于特定函数,但出作用域并不释放。只有在程序结束时才释放。静态函数:作用范围局限于它的源文件。即只有本文件内的代码才可以访问它,函数名在其它文件中不可见。静态成员变量:即类变量,被所有类成员对象共...原创 2019-09-11 10:19:46 · 185 阅读 · 0 评论 -
2.8、运算符重载
2.8、运算符重载2.8.1、运算符重载的介绍C++中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。运算符重载就是赋予已有的运算符多重含义。大多数的重载运算符可以定义为普通非成员函数或类的成员函数。作为类成员的重载函数,其形参看起来比操作数数目少1。运算符定义为非成员函数时, 通常必须将它们设置为所操作类的友元函数。运算符重载的关键字:operatorC++中不...原创 2019-09-11 10:15:51 · 105 阅读 · 0 评论 -
2.7、C++友元的使用
2.7、C++友元的使用友元有友元函数和友元类。友元的存在是为了可以不通过调用成员函数就可以直接访问类的私有数据,以提高程序运行效率。友元其实是破坏了类的封装性。友元的关键字:friend。2.7.1、友元函数在类体内说明,在函数的类型说明符前加关键字friend;在类体外定义,定义格式与普通函数相同;友元函数不是成员函数;友元函数可以直接访问类体内的私有成...原创 2019-09-11 10:14:24 · 222 阅读 · 0 评论 -
1.1、C++对C语言的增强
第一部分、从C到C++1.1、C++对C语言的增强C++语言中的变量随用随定义。C++语言对全局变量的定义检测增强。C++语言对struct关键字的增强。C++语言新增bool类型关键字。(true是1,flase是0)。C++语言的三目运算符可以做左值。(因为C++返回值可以为引用,C语言返回一个值)。1.2、C++语言与C语言的区别1、命名空间1.> 命名空间...原创 2019-09-11 09:46:23 · 199 阅读 · 0 评论 -
1.2.1命名空间、默认参数和占位参数
1.2、C++语言与C语言的区别1、命名空间1.> 命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。2.>C++标准程序库中的所有标识符都被定义在一个名为std的namespace中。(三种使用方式)方式一:std :: cout << " "...原创 2019-09-11 09:50:32 · 176 阅读 · 0 评论 -
1.2.3-1.2.4 inline内联函数和函数重载
3、inline内联函数1.>内联函数它的具体做法和宏非常相似,也是在调用处直接将代码展开,只不过宏它是在预编译阶段展开,而内联函数是在编译阶段进行处理的。2.>内联函数和普通函数的区别:内联函数没有栈帧的开辟回退,一般我们直接把内联函数写在头文件中递归一般不能声明为内联函数。4.>C++中inline内联编译的限制:不能存在任何形式的循环语句不能存在过多的条件...原创 2019-09-11 09:52:31 · 217 阅读 · 0 评论 -
1.2.5-1.2.6 const关键字和引用
5、const关键字1.>C语言中的 const关键字C语言中const所修饰的变量不是一个常量,是一个常变量或者说是一个只读变量,有自己的存储空间,是有地址的。被修饰的变量不能作为数组的下标。const修饰的变量可以被初始化,但不可直接修改其值,可以通过指针对其值进行修改。//有自己的存储空间,可以通过指针对其内部的值进行修改。#include <stdio.h>...原创 2019-09-11 09:54:17 · 230 阅读 · 0 评论 -
1.2.7new和delete 、malloc和free(C++与C语言的动态内存开辟)
7、new和delete 、malloc和free(C++与C语言的动态内存开辟)1、动态内存开辟:所谓动态内存分配是指在程序运行期间根据实际需要随时申请内存,并在不需要时释放。2、C++与C语言开辟与释放内存所用关键字的区别 malloc/free是C++语言的标准库函数不是运算符,不在编译器控制权限之内。函数原型void *malloc(size_t size);void fre...原创 2019-09-11 09:56:05 · 199 阅读 · 0 评论 -
第二部分、面向对象简介2.1-2.2
1.1、面向对象编程1、C语言是以函数为中心的。2、C++是以数据(对象)为中心的。3、面向对象编程的特征有三点:封装、继承、多态。1.2、面向对象(生活中到内存中)1、对象的组成部分:属性(对象具有的特征) + 方法(对象进行的操作) = 对象2、生活中——>内存中 对象(通过抽象)——> 属性和行为 ——> 类(实现)——> class &l...原创 2019-09-11 09:59:42 · 117 阅读 · 0 评论 -
2.3封装性与其实现
2.3、实现封装性(类与对象)1、封装 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。2、类与对象1> 对象:客观世界中任何一个事物都可以看成一个对象( object )。对象组成:数据——描述对象的属性。函数——行为(操作代码),根据外界给的信息进行相应操作的代码外界给的信息进行相应操作的代码。...原创 2019-09-11 10:03:16 · 242 阅读 · 0 评论 -
2.4、构造函数与析构函数
2.4、构造函数与析构函数1.4.1 构造函数1>、构造函数作用用来在创建对象时初始化对象,总与new运算符一起使用在创建对象的语句中。一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。2>、构造函数特点构造函数不需要用户来调用它,而是在建立对象时自动执行。构...原创 2019-09-11 10:07:28 · 279 阅读 · 0 评论 -
2.5、拷贝构造函数与赋值函数
2.5、拷贝构造函数与赋值函数2.5.1、拷贝构造函数1、功能:用一个已知的对象来初始化一个被创建的同类对象。2、缺省拷贝构造函数:如果类中没有说明拷贝构造函数,则编译器自动生成一个具有上述形式的缺省拷贝构造函数,作为该类的公有成员,来进行对象间的位拷贝。每个类都有一个拷贝构造函数3、特点函数名同类名,无返回类型。只有一个参数,是对某个对象的常引用。<类名&...原创 2019-09-11 10:09:12 · 403 阅读 · 0 评论 -
2.6、类中的常量(const)
2.6、类中的常量(const)2.6.1、const与函数如果函数的参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。如果输入参数以值传递的方式传递对象,则宜改用“const&”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。在C++中,传递一个参数时,通常先选择通过引用传递,而且是通过常量(const)引用。2.6.2、...原创 2019-09-11 10:12:50 · 625 阅读 · 0 评论 -
C++笔记
文章目录C++笔记第一部分、从C到C++1.1、C++对C语言的增强1.2、C++语言与C语言的区别1、命名空间2、默认参数和占位参数3、inline内联函数4、函数重载5、const关键字6、引用7、new和delete 、malloc和free(C++与C语言的动态内存开辟)8、一些杂项第二部分、面向对象编程第一章、封装性(OOP)1.1、面向对象编程1.2、面向对象(生活中到内存中)1.3、...原创 2019-05-03 08:53:09 · 802 阅读 · 1 评论