
C++
文章平均质量分 84
风吹雨淋
这个作者很懒,什么都没留下…
展开
-
C++:异常
用于修饰子类虚函数,添加于函数括号之后原创 2022-12-06 17:51:51 · 384 阅读 · 0 评论 -
C++:内存分区模型&常见内存错误
内存分区模型C++程序在执行时将内存划分成4个区域划分意义:不同区域存放数据,赋予不同的生命周期,使编程更灵活代码区存放函数体的二进制代码,由操作系统进行管理全局区存放全局变量,静态变量,常量栈区由编译器自动分配释放,存放函数参数,局部变量堆区由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收程序在运行前只有代码区和全局区,运行后才会有栈区和堆区...原创 2022-12-05 18:23:29 · 198 阅读 · 0 评论 -
C++:智能指针
内存泄漏:指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死工程前期良好的设计规范,养成良好的编码规范,申请的内存空间记着匹配的去释放。但是如果碰上异常时,就算注意释放了,还是可能会出问题。需要下一条智能指针来管理才有保证。采用RAII思想或者智原创 2021-10-16 23:37:00 · 212 阅读 · 0 评论 -
C++组合(简介)
组合:一个类包含另一个类对象继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。假设B组合了A,每个B对象中都有一个A对象如果只单纯考虑代码的复用,优先考虑组合;继承体系下,父类和子类耦合性太高,父类中某一成员更改,各子类中所继承的成员都要改...原创 2021-09-18 16:37:53 · 4952 阅读 · 2 评论 -
C++:抽象类、虚表、绑定
抽象类纯虚函数:在虚函数的后面写上 =0virtual void test()=0抽象类(也叫接口类):包含纯虚函数的类抽象类特点抽象类不能创建对象,不被继承就没有意义;抽象类可以创建指针,让这个父类的指针指向子类对象因为抽象类是类型,指针用于存储地址抽象类被子类继承后,该子类也不能实例化出对象,只有重写全部的纯虚函数,子类才能创建对象;纯虚函数规范了派生类必须重写,更体现出了接口继承普通函数的继承是一种实现继承,子类继承了父类的具体函数,可以使用函数,继承的原创 2021-08-23 10:51:21 · 1209 阅读 · 0 评论 -
C++:多态上(虚函数)&override&final
1.概念原创 2021-08-21 21:48:50 · 484 阅读 · 0 评论 -
C++:对象模型、虚拟继承与虚基表
继承方式与继承模型单继承子类只有一个父类多继承子类有多个父类菱形继承单继承和多继承的复合子类对象模型,就是以继承成员变量的次序排序多继承:子类在继承多个父类时,每个父类前必须加继承权限,否则就是默认继承菱形继承:D继承B1和B2,将变量a继承了两次,编译器就不知道变量a,是从B1中继承的,还是访问B2中继承的应将29行代码修改为stu.B1::a = 10;使用作用域限定,使访问明确化成员函数也会出现二义性菱形继承中二义性问题→顶层父原创 2021-08-21 10:14:56 · 375 阅读 · 0 评论 -
C++:继承&赋值兼容
1.概念概念:继承就是一个新类拥有全部被继承类的成员变量和成员函数新产生的继承类还有自己独有的成员变量和成员函数C++中把产生新类的被继承类叫做基类(父类);由基类通过继承方式产生的新类叫做派生类(子类);作用:继承是代码复用的重要手段;实现方式:将相同的成员抽取出来,相同的部分单独实现一个类定义一个狗和猫两个动物类,类中有很多重复的成员,如果再定义一些动物,就会写大量重复性代码继承代码:2.继承权限不同继承方式下,子类对父类中不同权限成员的访问限制原创 2021-08-20 16:23:23 · 1683 阅读 · 0 评论 -
C++:非类型模板参数,模板的特化与偏特化
在模板参数列表中,实际上是将用户存储元素的类型参数化在写代码时不用关心类型,T就是将具体类型参数化,将T这种参数称为类型参数非类型模板参数:在定义模板参数列表时,除了给类型参数外,还能用系统提供的内置类型作为模板参数就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用模板出现的参数类型分为两种:函数模板,类模板Template<class T, size_t N> //由系统提供的内置类型作为模板参数;N为非类型参数,是常量//N为非类型模板参原创 2021-08-19 14:37:22 · 1074 阅读 · 0 评论 -
C++:模板-函数模板与类模板
函数模板:模板并不是真正的函数,只是告诉编译器这是一个函数编写样板typename是用来定义模板参数关键字,也可以使用class定义一个模板:template <typename T> //模板参数列表,告诉编译器T是一个类型T Add (T left,T right)//参数列表{ return left+right;}Add(1, 2); //隐式实例化Add<int>(1, 2.0); //显式实例化,用<>标明将模板实例化成什么类型原创 2021-07-17 18:31:52 · 249 阅读 · 0 评论 -
C++:new与delete
C/C++内存分布图对内存区域划分的原因:int* p = (int*) malloc (sizeof (int)*4)指针p在栈上开辟,但是p指针指向了堆上的空间从堆上申请空间class test{ private: int _data; int* _p;public: test( ) { _p=new int[10]; cout<<test( )<<endl; } ~test( ) { delete _p[ ]; cout<&原创 2021-07-17 10:24:42 · 3183 阅读 · 0 评论 -
C++类和对象:友元&内部类
class Date{ public: Date (int year ) { _year = year ; _month = month ; _day = day ; }private: int _year; int _month; int _day; const int _a;};原创 2021-07-15 19:23:07 · 899 阅读 · 1 评论 -
C++类与对象:初始化列表(赋值和初始化的区别)
const不能修饰构造函数,拷贝构造函数,析构函数,运算符重载;因为它们函数本身就要对成员变量进行操作初始化:对一个不存在的变量进行定义并赋值int a=10;1要定义2要赋值,缺一不可;赋值:对一个已经存在变量进行赋值int a; a=10;对同一变量初始化只能进行一次,赋值可以有多次class Date{ public: Date ( ) { _year = year ; _month = month ; _day = day ; _a=100; }p原创 2021-07-15 10:35:41 · 1379 阅读 · 0 评论 -
C++类与对象:运算符重载
什么是运算符重载:C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,有返回值,函数名及参数列表;其返回值类型与参数列表与普通的函数类似。编译器对于自定义类型的对象,都不支持基本操作符(>,<,++,–)对对象进行操作;只能进行重载关键字:operator函数原型:返回值类型 operator操作符(参数列表),关键字operator后面接需要重载的运算符符号注意:不能重载非运算符;重载操作符函数参数,必须有一个类类型或枚举类...原创 2021-07-14 23:06:37 · 1045 阅读 · 0 评论 -
C++类与对象:拷贝构造函数&浅拷贝
拷贝构造函数原创 2021-07-14 16:37:33 · 1725 阅读 · 0 评论 -
C++类与对象: const与static
类中另一种成员:const成员修饰成员变量:(后面补)修饰成员函数:void test () constconst修饰函数返回值:在接收时不能修改返回值第二个const修饰函数参数不能修改函数形参第三个const修饰成员函数本身—const成员函数第三个const,本质是在修饰this的指向(所以不能修饰全局函数,全局函数中无this指针);this指针的类型是 类类型* ;函数const修饰后指针类型变成:const 类类型* ;不能通过this修改对象中成员变量的值;只原创 2021-07-12 19:51:08 · 792 阅读 · 1 评论 -
C++类与对象:初识(默认)构造函数与析构函数
对于Date类,可以通过SetDate公有的方法给对象设置内容,但是如果每次创建对象都调用该方法设置信息过于麻烦,那能否在对象创建时,就将信息设置进去呢?构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次构造函数:功能:在创建对象时调用构造函数,完成赋值,不对对象开辟空间class Date{ public: /*我们自己用一个成员函数完成对象的赋值 void SetDate(int yea原创 2021-07-12 00:17:26 · 1094 阅读 · 3 评论 -
C++类与对象:类、对象的三大特性、this指针
类与对象对象:属性(数据)+功能(以函数方式体现)类:对对象的描述C++中struct和class都能定义类,但两者类中成员的默认访问权限不同struct默认权限是publicclass默认权限是privateC和C++中的struct没有可比性,因为两者含义不一样;在C++中可以称之为结构体,但基本都称其为类;本质已经不同访问权限:限定类中的成员能否直接在类外来使用public:公有可以在类外直接访问private:私有不能直接在类外访问原创 2021-07-11 20:21:02 · 754 阅读 · 0 评论 -
C++引用&引用在函数中的使用场景
引用:引用概念:给已定义的变量取别名,变量类型与引用类型必须要一样,不创建新空间;引用的理解:C++新增了一种复合类型变量------引用变量 。引用就是已定义变量的一个别名(通俗的理解就是,当定义了一个变量,该变量名就相当于我们人身份证上的名字,引用就是平时朋友之间起的外号);引用的作用:引用变量和原变量完全相同。引用定义int main(){ int a=10; int& ra=a; //ra就是a的引用 return 0;}ra就是a的引用,对变量ra和变量a进原创 2021-07-11 13:53:40 · 3357 阅读 · 0 评论 -
C++函数重载,内联函数,auto
函数重载:在同一个作用域中,函数名必须相同,参数列表必须不同参数个数不同;参数类型不同;参数类型次序不同(与返回值类型无关)原创 2021-07-11 13:53:24 · 471 阅读 · 0 评论 -
C++基础:命名空间
#include<iostream>using namespace std; //命名空间int main(){ cout<<"hello,word"<<endl; //输出语句}命名空间:概念实质是一个作用域,不是类型,不能创建对象或者类型作用主要用于解决命名冲突比如说A和B各写了一个test( )函数,在这同一个程序中,为了编译正确,会定义出两个命名空间,各自的test函数定义在AB两个人的命名空间中,如果要在命原创 2021-06-20 13:57:12 · 2470 阅读 · 0 评论