自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 虚析构和纯虚析构函数

多态时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用子类的析构代码,则导致内存泄漏。 解决方式:将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性: 1,可以解决父类指针释放子类对象 2,都需要有具体的函数实现 虚析构和纯虚析构区别: 如果时纯虚析构,则该类属于抽象类,无法实例化对象 虚析构语法: virtual ~类名() { … } 纯虚析构语法: virtual ~类名() = 0; 类名:: ~类名() { …} #include <iostream

2020-12-08 18:21:46 952

原创 纯虚函数和抽象类

在多态中,通常父类中的虚函数的实现是毫无意义的,主要都是调用子类中重写的内容,因此,可以将虚函数改写为纯虚函数。 纯虚函数语法:virtual 返回值类型 函数名 (参数列表) = 0; 当类中有了纯虚函数:这个类也称为**抽象类 ** 抽象类特点: 1,无法实例化对象 2,子类必须重写抽象类中的虚函数,否则子类也属于抽象类 #include <iostream> #include <string> using namespace std; class VirtualBas

2020-12-08 16:19:41 218

原创 多态-基本语法

多态分类: 静态多态 和 动态多态。 静态多态: 函数重载,运算符重载均属于静态多态,即复用函数名。 动态多态:由派生类重写基类方法,然后用基类引用(指针)指向派生类对象来确定具体该调用哪一个类的虚函数,调用方法时,会进行动态绑定,这就是动态多态。 静态多态和动态多态的区别: 静态多态的函数地址时早绑定,编译阶段就已经确定函数地址。 动态多态的函数地址是晚绑定,运行阶段确定函数地址。 动态多态满足条件: 1,有继承关系 2,子类需要重写父类的虚函数,使用virtual定义虚函数 #include &lt

2020-12-08 09:40:46 221

原创 const修饰成员函数和对象

常函数 成员函数后加const,称这个函数为常函数。 常函数特性: 1,常函数内不可修改成员属性。 2,成员属性声明加关键字mutable后,在常函数中依然可以修改。 常对象 声明时,在对象前加const,称该对象为常对象。 常对象特性: 常对象只能调用常函数。 #include <iostream> #include <string> using namespace std; class Person { public: //this指针本质,是指针常量,指针的指向不可修

2020-12-07 11:51:48 319

原创 对象特性-this指针

如成员变量和成员函数内存分配所述,成员变量和成员函数分开存储,每一个非静态成员函数的实例只有一份,则多个同类型的对象都会访问同一份成员函数代码。问题来了, 这份成员函数代码如何区分是哪一个对象访问呢? 解决方法:C++编译器通过提供特殊对象指针,this指针;this指针指向被调用的成员函数所属的对象。 this指针特性: 1,this指针是隐含每一个非静态成员函数内的一种指针。 2,this指针不需要定义,直接使用即可。 this指针用途 1,形参与成员函数变量名一样时,可通过this指针区分 2,在类的

2020-12-07 10:45:31 175

原创 成员变量和成员函数内存分配

在C++中,成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。 非静态成员函数,静态成员函数,静态成员变量占用的内存均不占用类的对象空间上。 示例1 #include <iostream> #include <string> using namespace std; class Person { public: void func1(){} //非静态成员函数 不属于类的对象上 static void func2(){} //静态成员函数 不属于类的对象上

2020-12-04 16:22:16 303

原创 对象特性-静态成员

静态成员 静态成员就是在成员变量和成员函数前加上关键字static ,分为:静态成员变量和静态成员函数。 静态成员变量: 所有对象共享同一份数据 编译阶段分配内存 类内声明,类外初始化 静态成员函数 所有对象共享同一函数 静态成员函数只能访问静态成员变量 ...

2020-12-04 15:01:41 384

原创 对象特性-深拷贝与浅拷贝

深拷贝与浅拷贝 浅拷贝:使用编译器默认提供的拷贝构造函数,进行简单的值拷贝。 深拷贝:在堆区重新申请空间,进行拷贝工作。 在编程中,有时在类中定义指针,需要为指针在堆区开辟内存,这时候需要重写拷贝构造函数,并在拷贝构造函数中为该指针重新在开辟内存。 否则,如果使用编译器提供的默认拷贝构造函数,只是进行了浅拷贝,所有对象的指针都指向同一地址;导致所有实例化对象在释放内存时,都释放同一指针,即多次释放堆区内存,程序崩溃。 示例1 使用默认拷贝构造函数,进行浅拷贝,重复释放指针 *m_height ,导致程

2020-12-04 14:37:26 115

原创 构造函数生成与调用规则

构造函数生成规则 默认情况下,C++编译器至少给一个类添加3个函数: 1、默认构造函数 (无参,函数体为空) 2、默认析构函数 (无参,函数体为空) 3、默认拷贝构造函数,对属性进行拷贝 编译器生成构造函数规则 1、如果用户定义有参构造函数,C++编译器不在提供无参构造函数,但会提供默认拷贝构造 2、如果用户定义拷贝构造函数,C++编译器不在提供其他构造函数 #include <iostream> #include <string> using namespace std; cla

2020-12-03 23:29:49 257

原创 类与对象特性-构造函数分类与调用

构造函数分类 按参数分为:有参和无参构造 按类型分为:普通构造和拷贝构造 调用方式 调用方式有三种:括号法,显示法,隐式转换法。 #include <iostream> #include <string> using namespace std; class person { public: person() //无参构造函数 { cout << "Person的无参构造函数" << endl; } person(int a) //有参构造函数

2020-12-02 22:57:01 146

原创 友元函数&友元类&友元成员函数

友元函数 有些情况下,全局函数需要访问类中的私有成员,这种函数叫友元函数;如:客人可以访问客厅,但一般客人不可以去主人卧室,关系较好的朋友才能访问私有的卧室,这时就要用到友元,友元的关键字为friend 示例 #include <iostream> #include <string> using namespace std; /*********1、函数做友元**********/ class Building { //友元函数声明 friend void func(Buil

2020-11-23 22:26:11 417

原创 类对象作为类成员

类对象作为类成员 1、含义 在C语言中,一个结构体可以包含另外一个结构体。在C++中一个类的成员,也可以是另一个类的对象。 例如: B类中有对象a作为成员,称a为对象成员。 class A {}; class B{ int i; A a; }; 2、构造函数和析构函数生成顺序? 当其他类的对象作为本类成员,先生成对象成员的类的构造函数,再生成本类的构造函数;析构函数生成顺序和构造函数生成顺序相反。 3、示例 #include <iostream> #include <string&g

2020-11-22 01:40:16 766

原创 函数重载

函数重载 在C++中,同一个函数名称可多次定义,即函数重载。函数重载主要作用是提高代码复用性。 1、函数重载满足条件 同一作用域下 函数名称相同 函数参数类型不同 或者个数不同或者顺序不同 注意:返回值不能作为函数重载的条件 2、示例 #include <iostream> #include <string> using namespace std; void func() { cout << "func 的调用" << endl; } void

2020-11-18 22:15:40 314

原创 C++引用

C++引用 1、引用的本质与作用 本质:是一个指针常量 作用:给变量取一个别名,可通过操作别名操作变量 2、注意事项 (1)、不要返回局部变量的引用 (2)、引用的指向不可改变 (3)、如果函数返回值是引用,可作为左值 3、示例 int a = 10; int &b = a; cout << "a = " << a << endl; cout << "b = " << b << endl; b = 200; //通过引

2020-11-18 17:55:43 116

原创 C++中new关键字

new操作符 1、作用 在堆区开辟内存,由程序员手动开辟和释放;返回该数据的指针。 2、内存的分配与释放 分配:指针变量 = new 类型名 (初始化式); int *p = new int(10); //创建一个元素 int *arr = new int[10]; //创建数组 释放:delete 指针名; delete p1; //释放堆区一个数据 delete[] arr; //释放堆区一个数组 3、示例 //例1 int *p = new int(10); cout << *p

2020-11-18 10:51:42 494 1

空空如也

空空如也

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

TA关注的人

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