- 博客(22)
- 收藏
- 关注
原创 1.3类模板
总结:主流的解决方式是第二种,将类模板成员函数写到一起,并将后缀名改为.hpp。当子类继承的父类是一个类模板时,子类在声明的时候,需要指定出父类中T的类型。2.参数模板化 ---将对象中的参数变为模板进行传递。总结:类模板中的成员函数并不是一开始就创建的,在调用时才去创建。建立一个通用类,类中的成员 数据类型可以不具体制定,用一个。总结:如果父类是类模板,子类需要指定出父类中T的数据类型。1.指定传入的类型 ---直接显示的对象的数据类型。学习目标:能够掌握类模板中的成员函数类外实现。
2022-10-24 21:32:54 137 1
原创 数据结构---串的模式匹配
设有两个串s和t,要在串s中找到与t相等的子串。通常将s称为目标串,t称为模式串,这种串的定位查找也称为模式匹配。常见的串的模式匹配算法有4种。
2022-10-16 14:17:27 2430 2
原创 5 文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件文件类型分为两种:1.文本文件 - 文件以文本的ASCII码形式存储在计算机中2.二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们操作文件的三大类:1.ofstream: 写操作2.ifstream: 读操作3.fstream: 续写操作。
2022-10-09 22:47:21 120
原创 4.7.5 虚析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。如果是虚析构,该类属于抽象类,无法实例化对象。解决方式:将父类中的析构函数改为。virtual~类名()=0;virtual~类名(){}都需要有具体的函数实现。类名::~类名(){}
2022-09-28 22:42:21 66
原创 4.7.5多态案例二.制作饮品
利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶。制作饮品的大致流程为:煮水--冲泡--倒入杯中--加入辅料。
2022-09-28 22:06:26 93
原创 4.7.4 纯虚函数和抽象类
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。纯虚函数语法:virtual 返回值类型 函数名 (参数列表) = 0;子类必须重写抽象类中的纯虚函数,否则也属于抽象类。当类中有了纯虚函数,这个类也成为抽象类。因此可以将虚函数改为纯虚函数。
2022-09-27 21:04:18 58
原创 4.7.3 多态案例---计算器类
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类。总结:C++开发提倡利用多态设计程序架构,因为多态优点很多。3.利用前期和后期的扩展以及维护。1.代码组织结构清晰。
2022-09-25 23:47:01 299
原创 4.7 多态
vfptr->vftable 表内记录虚函数的地址。当子类继承父类内容并且重写父类虚函数后,子类中的虚函数表内部会替换成子类的虚函数地址。在上例的Animal类中加入关键字virtual后该类的大小由1变为4。静态多态:函数重载和运算符重载属于静态多态,复用函数名。静态多态的函数地址早绑定- 编译阶段确定函数地址。动态堕胎的函数地址晚绑定- 运行阶段确定函数地址。当父类的指针或者引用指向子类对象的时候,发生多态。动态多态:派生类和虚函数实现运行时多态。4.7.1 多态的基本概念。
2022-09-24 20:13:52 68
原创 数据结构(2)
抽象数据类型线性表的定义如下:ADT List{数据对象:{称n为线性表的表长;称n=0时的线性表为空表}数据关系:基本操作:{结构初始化}操作结果:构造一个空的线性表L{销毁结构}{引用型操作}GetElem(L,i,&e) 按位查找LocateElem(L,e,compare()) 按值查找{加工型操作}ListInsert(&L,i,e) 插入ListDelete(&L,i,&e) 删除用一组地址连续的存储单元依次存放线性表中的数据元素👆线性表的起始地址。...
2022-08-10 17:49:04 366
原创 1.1 数据结构的讨论范畴
程序设计:为计算机处理问题编制一组指令集算法:处理问题的策略数据结构:问题的数学模型例如:数值计算的程序设计问题结构静力分析计算--线性代数方程组 非数值计算的程序设计问题例:求一组(n个)整数中的最大值算法:基本操作是“比较两个数的大小”模型:例:计算机对弈算法:对弈的规则和策略模型:例:足协的数据库管理算法:需要管理的项目 如何管理 用户界面模型:数据:所有能被输入到计算机中,且被计算机处理的符号的集合计算机操作的对象的总称是计算机处理的信息的某种特定的符号表示形式数据元素:数据中的一个“个体”,数据
2022-07-09 11:39:35 406
原创 魂学(1)
从伯雷塔尼亚到罗德兰,从多兰古雷格到洛斯里克,生命的黎明和黄昏在历经了千万年间的沉浮之后显得苍凉而美丽,这是一个充满苦难的世界,这也是一个充满辉煌的世界。魂与火,光与暗,生与死在此地循环交替。Welcome to Darksouls!黑魂的世界并不是地球,也不存在所谓的太阳系和太空,世界的秩序围绕三个元素展开,即火,魂和 暗。这三个元素乍看之下并没有直接联系,但他们在魂的世界观中就如同空气,基因,时间等要素,串联起了上万年的沉浮,日月之行,星辰变幻,皆源自其中,对生命而言,是高于一切的存在。如同凯尔特神话一
2022-06-04 22:08:13 598 2
原创 4.6 继承
继承是面向对象三大特性之一有些类与类之间存在特殊的关系,例如下图中:我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码4.6.1 继承的基本语法例如我们看到很多网站中,都用公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同。接下来我们分别利用普通写法和继承写法来实现网页中的内容,看一下继承存在的意义以及好处。#include<stdc++.h>using namespace s
2022-05-31 21:11:58 94
原创 4.5 运算符重载
运算符重载概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型4.5.1加号运算符重载作用:实现两个自定义数据类型相加的运算
2022-05-29 21:24:41 88
原创 4.4 友元
生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去但是呢,你也可以允许你的好基友进去。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员有缘的关键字为 friend友元的三种实现1.全局函数做友元#include<stdc++.h>using namespace std;
2022-05-23 20:46:19 145
原创 4.3 C++对象模型和this指针
4.3.1 成员变量和成员函数分开存储在C++中,类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上#include<stdc++.h>using namespace std;//成员变量 和 成员函数 是分开存储的class Person{ int m_A;//非静态成员变量 属于类的对象上的 static int m_B;//静态成员变量 不属于类的对象上 void func(){}//非静态成员函数 不属于类的对象上 sta
2022-05-23 19:33:10 84 2
原创 4.2 对象的初始化和清理
生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用的时候也会删除一些自己信息数据保证安全。C++中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。4.2.1构造函数和析构函数对象的初始化和清理也是两个非常重要的安全问题一个对象或者变量没有初始状态,对其使用后果是未知同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题c++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作是编译器强制要我
2022-05-17 20:33:11 483
原创 4.1封装(c++)
4.1.1 封装的意义封装是c++面向对象的三大特性之一封装的意义:将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制封装意义一:在设计类的时候,属性和行为写在一起,表现事物语法:class 类名{ 访问权限: 属性 / 行为 };示例1:设计一个圆类,求圆的周长#include<stdc++.h>using namespace std;//设计一个圆类//圆求周长的公式:2*PI*半径const double PI = 3.14;
2022-05-09 20:55:24 80
原创 3 函数提高
3.1 函数默认参数在c++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型 函数名(参数=默认值){ }#include<stdc++.h>using namespace std;//int func2(int a = 10, int b = 10);//函数默认参数//如果我们自己传入数据,就用自己的数据,如果没有,那用默认值;//语法:返回值类型 函数名(形参=默认值){}int func(int a, int b=20 ,int c=30){..
2022-05-09 18:36:15 183
原创 2.引用(c++)
2.1引用的基本使用作用:给变量起别名语法:数据类型 &别名 = 原名#include<stdc++.h>using namespace std;int main(){ int a = 10; int& b = a; b = 20; cout << a << endl;//a的值也变成20}2.2注意事项:1.引用一定要初始化2.引用一旦初始化之后就不可以更改2.3 引用做函数参数作用:函数传参时,可以利用
2022-05-06 21:30:27 423
原创 new操作符
1.3 new操作符C++中利用new操作符在堆区开辟数据堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符delete语法:new数据类型利用new创建的数据,会返回该数据对应的类型的指针
2022-05-06 20:05:10 118
原创 内存分区模型
c++程序在执行时,将内存大方向划分4个区域代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存在全局变量和静态变量以及常量栈区:由编译器自动分配释放,存在函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程1.1 程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域代码区:存在CPU执行的机器指令代码区是共享的,只
2022-05-05 21:23:50 60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人