04 2022 档案

摘要:案例描述 有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。 实现步骤 创建五名选手,放到vector中 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中 sort算法对deque容器中分数排序,去除最 阅读全文
posted @ 2022-04-30 18:13 安静点-- 阅读(25) 评论(0) 推荐(0) 编辑
摘要:deque容器 deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度回比vector快 vector访问元素时的速度会比deque快,这和两者内部实现 阅读全文
posted @ 2022-04-30 18:11 安静点-- 阅读(48) 评论(0) 推荐(0) 编辑
摘要:2 vector构造函数 功能描述: 创建vector容器 函数原型: vector<T> v; //采用模板实现类实现,默认构造函数 vector(v.begin(), v.end()); //将v[begin(), end())区间中的元素拷贝给本身。 vector(n, elem); //构造 阅读全文
posted @ 2022-04-24 18:21 安静点-- 阅读(67) 评论(0) 推荐(0) 编辑
摘要:string子串 功能描述: 从字符串中获取想要的子串 函数原型: string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串 示例: //子串 void test01() { string str = "abcdefg 阅读全文
posted @ 2022-04-24 17:23 安静点-- 阅读(987) 评论(0) 推荐(0) 编辑
摘要:string插入和删除 功能描述: 对string字符串进行插入和删除字符操作 函数原型: string& insert(int pos, const char* s); //插入字符串 string& insert(int pos, const string& str); //插入字符串 stri 阅读全文
posted @ 2022-04-24 17:21 安静点-- 阅读(1714) 评论(0) 推荐(0) 编辑
摘要:string字符存取 string中单个字符存取方式有两种 char& operator[](int n); //通过[]方式取字符 char& at(int n); //通过at方法获取字符 示例: void test01() { string str = "hello world"; for ( 阅读全文
posted @ 2022-04-24 17:19 安静点-- 阅读(263) 评论(0) 推荐(0) 编辑
摘要:string字符串比较 功能描述: 字符串之间的比较 比较方式: 字符串比较是按字符的ASCII码进行对比 = 返回 0 > 返回 1 < 返回 -1 函数原型: int compare(const string &s) const; //与字符串s比较 int compare(const char 阅读全文
posted @ 2022-04-24 17:16 安静点-- 阅读(1926) 评论(0) 推荐(0) 编辑
摘要:string查找和替换 功能描述: 查找:查找指定字符串是否存在 替换:在指定的位置替换字符串 函数原型: int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找 int find(const char* s, 阅读全文
posted @ 2022-04-24 17:13 安静点-- 阅读(839) 评论(0) 推荐(0) 编辑
摘要:string字符串拼接 功能描述: 实现在字符串末尾拼接字符串 函数原型: string& operator+=(const char* str); //重载+=操作符 string& operator+=(const char c); //重载+=操作符 string& operator+=(co 阅读全文
posted @ 2022-04-24 17:12 安静点-- 阅读(4934) 评论(0) 推荐(1) 编辑
摘要:string赋值操作 功能描述: 给string字符串进行赋值 赋值的函数原型: string& operator=(const char* s); //char*类型字符串 赋值给当前的字符串 string& operator=(const string &s); //把字符串s赋给当前的字符串 阅读全文
posted @ 2022-04-24 17:11 安静点-- 阅读(2532) 评论(0) 推荐(0) 编辑
摘要:string基本概念 本质: string是C++风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 特点: string 类内部封装了很多成员方法 例如: 阅读全文
posted @ 2022-04-24 17:09 安静点-- 阅读(68) 评论(0) 推荐(0) 编辑
摘要:vector存放内置数据类型 容器: vector 算法: for_each 迭代器: vector<int>::iterator 示例: #include <vector> #include <algorithm> void MyPrint(int val) { cout << val << en 阅读全文
posted @ 2022-04-24 16:53 安静点-- 阅读(571) 评论(0) 推荐(0) 编辑
摘要:STL初识 1 STL的诞生 长久以来,软件界一直希望建立一种可重复利用的东西 C++的面向对象和泛型编程思想,目的就是复用性的提升 大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准,诞生了STL ​ 2 STL基本概念 STL(Standard 阅读全文
posted @ 2022-04-24 16:13 安静点-- 阅读(61) 评论(0) 推荐(0) 编辑
摘要:类模板与友元 学习目标: 掌握类模板配合友元函数的类内和类外实现 全局函数类内实现 - 直接在类内声明友元即可 全局函数类外实现 - 需要提前让编译器知道全局函数的存在 示例: template<class T1, class T2> class Person { //1、全局函数配合友元 类内实现 阅读全文
posted @ 2022-04-22 22:42 安静点-- 阅读(94) 评论(0) 推荐(0) 编辑
摘要:类模板分文件编写 学习目标: 掌握类模板成员函数分文件编写产生的问题以及解决方式 问题: 类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到 解决: 解决方式1:直接包含.cpp源文件 解决方式2:将声明和实现写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制 示例 阅读全文
posted @ 2022-04-16 18:29 安静点-- 阅读(189) 评论(0) 推荐(0) 编辑
摘要:类模板成员函数类外实现 学习目标:能够掌握类模板中的成员函数类外实现 示例: #include <string> //类模板中成员函数类外实现 template<class T1, class T2> class Person { public: //成员函数类内声明 Person(T1 name, 阅读全文
posted @ 2022-04-16 18:20 安静点-- 阅读(130) 评论(0) 推荐(0) 编辑
摘要:类模板与继承 当类模板碰到继承时,需要注意一下几点: 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型 如果不指定,编译器无法给子类分配内存 如果想灵活指定出父类中T的类型,子类也需变为类模板 示例: template<class T> class Base { T m; } 阅读全文
posted @ 2022-04-16 18:15 安静点-- 阅读(140) 评论(0) 推荐(0) 编辑
摘要:类模板对象做函数参数 学习目标: 类模板实例化出的对象,向函数传参的方式 一共有三种传入方式: 指定传入的类型 直接显示对象的数据类型 参数模板化 将对象中的参数变为模板进行传递 整个类模板化 将这个对象类型 模板化进行传递 示例: #include <string> //类模板 template< 阅读全文
posted @ 2022-04-16 18:12 安静点-- 阅读(207) 评论(0) 推荐(0) 编辑
摘要:类模板中成员函数创建时机 类模板中成员函数和普通类中成员函数创建时机是有区别的: 普通类中的成员函数一开始就可以创建 类模板中的成员函数在调用时才创建 示例: class Person1 { public: void showPerson1() { cout << "Person1 show" << 阅读全文
posted @ 2022-04-16 17:55 安静点-- 阅读(158) 评论(0) 推荐(0) 编辑
摘要:类模板与函数模板区别 类模板与函数模板区别主要有两点: 类模板没有自动类型推导的使用方式 类模板在模板参数列表中可以有默认参数 示例: #include <string> //类模板 AgeType 默认是int类型,所以在调用的时候可以不显示填 template<class NameType, c 阅读全文
posted @ 2022-04-16 17:48 安静点-- 阅读(72) 评论(0) 推荐(0) 编辑
摘要:类模板语法 类模板作用: 建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。 语法: template<typename T> 类 解释: template 声明创建模板 typename 表面其后面的符号是一种数据类型,可以用class代替 T 通用的数据类型,名称可以替 阅读全文
posted @ 2022-04-16 17:44 安静点-- 阅读(57) 评论(0) 推荐(0) 编辑
摘要:模板的局限性 局限性: 模板的通用性并不是万能的 例如: template<class T> void f(T a, T b) { a = b; } 在上述代码中提供的赋值操作,如果传入的a和b是一个数组,就无法实现了 再例如: template<class T> void f(T a, T b) 阅读全文
posted @ 2022-04-12 22:49 安静点-- 阅读(62) 评论(0) 推荐(0) 编辑
摘要:普通函数与函数模板的调用规则 调用规则如下: 如果函数模板和普通函数都可以实现,优先调用普通函数 可以通过空模板参数列表来强制调用函数模板 函数模板也可以发生重载 如果函数模板可以产生更好的匹配,优先调用函数模板 示例: //普通函数与函数模板调用规则 void myPrint(int a, int 阅读全文
posted @ 2022-04-12 22:47 安静点-- 阅读(128) 评论(0) 推荐(0) 编辑
摘要:1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 1.2 函数模板 C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 1.2.1 函数模板语法 阅读全文
posted @ 2022-04-11 23:07 安静点-- 阅读(98) 评论(0) 推荐(0) 编辑
摘要:文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件可以将数据持久化 C++中对文件操作需要包含头文件 ==< fstream >== 文件类型分为两种: 文本文件 - 文件以文本的ASCII码形式存储在计算机中 二进制文件 - 文件以文本的二进制形式存储在计算机中,用 阅读全文
posted @ 2022-04-10 23:09 安静点-- 阅读(73) 评论(0) 推荐(0) 编辑
摘要:案例描述: 电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储) 将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商 创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口 测试时组装三台不同的电脑进行工作 示例: #incl 阅读全文
posted @ 2022-04-10 22:33 安静点-- 阅读(48) 评论(0) 推荐(0) 编辑
摘要:虚析构和纯虚析构 多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性: 可以解决父类指针释放子类对象 都需要有具体的函数实现 虚析构和纯虚析构区别: 如果是纯虚析构,该类属于抽象类,无法实例化 阅读全文
posted @ 2022-04-10 19:09 安静点-- 阅读(95) 评论(0) 推荐(0) 编辑
摘要:案例描述: 制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶 //抽象制作饮品 class AbstractDrinking { public: //烧水 virtual void Boil() = 0; //冲泡 阅读全文
posted @ 2022-04-10 18:11 安静点-- 阅读(32) 评论(0) 推荐(0) 编辑
摘要:纯虚函数和抽象类 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将虚函数改为纯虚函数 纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为==抽象类== 抽象类特点: 无法实例化对象 子类必须重写抽象类中的纯虚 阅读全文
posted @ 2022-04-10 18:09 安静点-- 阅读(34) 评论(0) 推荐(0) 编辑
摘要:多态的基本概念 多态是C++面向对象三大特性之一 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运行阶段确定函数地址 下 阅读全文
posted @ 2022-04-10 18:02 安静点-- 阅读(55) 评论(0) 推荐(0) 编辑
摘要:菱形继承概念: ​ 两个派生类继承同一个基类 ​ 又有某个类同时继承者两个派生类 ​ 这种继承被称为菱形继承,或者钻石继承 典型的菱形继承案例: 菱形继承问题: 羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。 草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份 阅读全文
posted @ 2022-04-10 17:31 安静点-- 阅读(75) 评论(0) 推荐(0) 编辑
摘要:C++允许一个类继承多个类 语法: class 子类 :继承方式 父类1 , 继承方式 父类2... 多继承可能会引发父类中有同名成员出现,需要加作用域区分 ,所以C++实际开发中不建议用多继承 示例: class Base1 { public: Base1() { m_A = 100; } pub 阅读全文
posted @ 2022-04-10 17:07 安静点-- 阅读(89) 评论(0) 推荐(0) 编辑
摘要:继承同名静态成员处理方式 问题:继承中同名的静态成员在子类对象上如何进行访问? 静态成员和非静态成员出现同名,处理方式一致 访问子类同名成员 直接访问即可 访问父类同名成员 需要加作用域 示例: class Base { public: static void func() { cout << "B 阅读全文
posted @ 2022-04-10 17:03 安静点-- 阅读(46) 评论(0) 推荐(0) 编辑
摘要:继承同名成员处理方式 问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢? 访问子类同名成员 直接访问即可 访问父类同名成员 需要加作用域 示例: class BaseTest { public: BaseTest() { m_A = 100; } void func 阅读全文
posted @ 2022-04-10 16:43 安静点-- 阅读(46) 评论(0) 推荐(0) 编辑
摘要:子类继承父类后,当创建子类对象,也会调用父类的构造函数 问题:父类和子类的构造和析构顺序是谁先谁后? 示例: class Base { public: Base() { cout << "Base构造函数!" << endl; } ~Base() { cout << "Base析构函数!" << e 阅读全文
posted @ 2022-04-10 16:37 安静点-- 阅读(59) 评论(0) 推荐(0) 编辑
摘要:继承的语法:class 子类 : 继承方式 父类 继承方式一共有三种: 公共继承 保护继承 私有继承 如果是公共继承,父类中的私有方法不能访问。 如果是保护继承,类A中的a,b属性在子类B中变成了保护级别,私有还是不能访问 如果死是私有继承,a,b变成了私有级别,原先为私有级别的c同样不能访问。 示 阅读全文
posted @ 2022-04-10 16:10 安静点-- 阅读(73) 评论(0) 推荐(0) 编辑
摘要:待写 阅读全文
posted @ 2022-04-04 18:01 安静点-- 阅读(8) 评论(0) 推荐(0) 编辑
摘要:例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同 接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处 普通实现: //Java页面 class Java { public: void header() { cout << " 阅读全文
posted @ 2022-04-04 18:01 安静点-- 阅读(43) 评论(0) 推荐(0) 编辑
摘要:友元 生活中你的家有客厅(Public),有你的卧室(Private) 客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去 但是呢,你也可以允许你的好闺蜜好基友进去。 在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或 阅读全文
posted @ 2022-04-04 17:59 安静点-- 阅读(63) 评论(0) 推荐(0) 编辑
摘要:常函数: 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象: 声明对象前加const称该对象为常对象 常对象只能调用常函数 this指针的本质是一个指针常量,指针的指向不可修改 如果想让指针指向的值也 阅读全文
posted @ 2022-04-04 17:28 安静点-- 阅读(118) 评论(0) 推荐(0) 编辑
摘要:空指针访问成员函数 C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性 //空指针访问成员函数 class Person { public: void ShowClassName() { cout << "我是Person类! 阅读全文
posted @ 2022-04-04 17:20 安静点-- 阅读(91) 评论(0) 推荐(0) 编辑
摘要:1 成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person { public: Person() { mA = 0; } //非静态成员变量占对象空间 int mA; //静态成员变量不占对象空间 static int 阅读全文
posted @ 2022-04-04 16:42 安静点-- 阅读(24) 评论(0) 推荐(0) 编辑
摘要:静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: 静态成员变量 所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化 静态成员函数 所有对象共享同一个函数 静态成员函数只能访问静态成员变量 **示例1 :**静态成员变量 class Person { 阅读全文
posted @ 2022-04-04 16:26 安静点-- 阅读(141) 评论(0) 推荐(0) 编辑
摘要:当类中成员是其他类对象时,我们称该成员为 对象成员 构造的顺序是 :先调用对象成员的构造,再调用本类构造 //析构顺序与构造相反 例如: class A {} class B { A a; } B类中有对象A作为成员,A为对象成员 那么当创建B对象时,A与B的构造和析构的顺序是谁先谁后? class 阅读全文
posted @ 2022-04-04 16:20 安静点-- 阅读(79) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示