对于c++的总结与思考
笔者觉得好用的学习方法:模板法
1.采用原因:由于刚从c语言面向过程的学习中解脱出来,立即把思路从面向过程转到面向对象肯定不现实,加之全新的复杂语法与操作,着实给新手学习这门语言带来了不小的困难。所以,笔者探索出了一种好用的学习方法:模板法。
2.采用方法:在接触新知识时,没有必要从一开始便理清新知识的来龙去脉,可以先去csdn上学习新知识的模板和语法,再写一些简单程序以强化理解。在听完学校的课程后,写作业时,可以先使用ai写一道简单题并学习其格式和逻辑,再自己写难题
笔者觉得好用的纠错方法:程序示踪法
1.采用范围:程序报错且错误在认知范围内,如果遇到认知范围外的错误或者不报错却运行不了,请直接找老师解决或者用AI检验
2.为什么笔者觉得它比调试更加高效?因为在调试的时候,为了理清监视变量的变化,需要在循环的每一步认真分析,这样会浪费大量时间。所以,笔者在程序报错时,首先会检查指针越界和数组循环问题,然后分块将代码注释并运行,通过成功运行的部分不断扩大最终找到问题所在,或者当itc报错而不显示输入数据时,在每次输入后都打印一遍以获得数据,在检查类的析构,构造,组合,多态等复杂的问题时,让每个函数都打印特定的值,以确定函数失效的部分
类与对象
1.数据的封装:在一个类中,有public,private,protected三种成员,它们对应了不同的保密程度,这点与数据封装有关,它们的区别是public可以由任意操作进行访问,而protected只能由本类和子类的成员函数访问(子类笔者下文会讲),private的封装性更好,只能由本类的成员函数访问(注意:在自己写题的时候尽量写成public类,一是写题没有封装性要求,二是防止因自己写的子类函数无法访问基类成员而纠错),三种成员必须显示声明如public:再写public类型的数据成员与成员函数,否则默认为private类型。
2.成员:在一个类中,有几个固定的组成部分:数据成员与成员函数。其中成员是类所具有的数据,如整型,浮点型,字符型,数组指针甚至其他的类。具体参考c语言的结构体,而成员函数有以下三种:构造函数(必须显示声明,分为三种:默认构造函数,赋值构造函数与复制构造函数,默认构造函数的格式为类型名(){}; ,赋值构造函数就和普通的函数一样,将实参复制为形参,复制后释放,复制构造函数既可以显示声明也可以不声明,系统自己会生成一个,但如果要用记得声明,它的格式如下):
class good
{
public:
int b;
good(){};
good(const good &a)
{
b=a.b;
}
};
普通成员函数:和写在类外的函数只有一个区别,就是它可以调用本类中的一切数据成员
析构函数,与构造函数的格式类似,前面需要加一个~(小提示:键盘左上角),它可以自己定义,或者由系统自动生成,往往与打印某些语句有关。
3.new与delete,这两个函数的使用参考malloc与free,笔者在动态内存存储中有讲,动态内存管理-CSDN博客,只要使用了new,就必须显示声明析构函数并将空间delete掉(delete[]表示释放一个数组的空间),至于原因,就由下面的话题来解释◕‿◕
深拷贝与浅拷贝
1.不出意外,我们的所有数据都进行了深拷贝,即成功拷贝,可以理解为不报错的拷贝。
2.但是不出意外的情况下还是出意外了,当我们准备拷贝指针以及指针类型的数据(字符串,数组,函数,类)时出现了一个问题,这些拷贝的都是目标内存空间的地址,地址只有一个,所以,当复制构造完成时,我们的对象a(书接上文代码)就被释放了,而这些空间被释放后,原对象也会对这些空间进行释放,但它们已经不存在了,所以就出现了错误。
3.解决方法:给这些数据一个新的空间,把指针指向的数据放进去,这时候指针只是一个媒介,只是指指路,真正操作的是它指向空间的数据
4.代码演示
class good
{
public:
int *p;//此处一般为数组good (const good& d)//拷贝构造函数,深拷贝版
{p = new char[strlen(d.p) + 1];//为这个指针申请一个新空间if (p != 0){strcpy(p, d.p);//只操作数据,不操作指针,析构记得delete};
函数重载(引入重要思想多态性)
1.为什么要有多态性:俗话说:“一千个读者就有一千个哈姆雷特”,在生活中,我们使用同一个工具,在不同场景中的使用方法和结果是不一样的,而c++中的函数重载正是还原了这点。一个函数,因为参数,函数体,返回结果的不同,实现了多种实现方式,这就是传说中的多态性。
2.函数重载的方法:一个函数名,因不同参数而产生不同情况。所以可以在这些情况下随意使用,不需要写多个函数,增加了代码的可读性,代码如下:
int add(int a,int b)
{
return a+b;
}
float add(float a,float b)
{
return a+b;
}
类的组合与类的继承(引入重要思想继承)
1.为什么要引入类的组合与类的继承?因为c++在尽力复刻生活中的关系,比如机器与零件的组合关系以及父与子之间的继承关系。
2.格式:类的组合在大类中的声明和数据成员一样,如good a;,但注意组合类的声明必须在大类之前,类的继承必须保证基类函数在子类函数之前声明,继承有三种方式,public,protected和private,不同的方式下继承导致成员类型发生变化的情况如下表:
3.继承格式:class 子类名:继承方式 基类名
4.继承方式分为单继承与多继承,即父类与子类对象一对一和多对一,已知子类可以调用父类的成员和成员函数,那么出现重叠怎么办?所以,就有了如下定义:
虚基类,虚函数与抽象类,顺序问题
1.虚基类引入目的:解决代码在多继承中出现的冲突问题,由最远的基类成员来提供基类数据,注意引入时要在第一级继承时将共同基类设置为虚基类(在继承类型前加virtual )
2.顺序问题请看下表
注意析构函数的执行过程与构造函数相反,先构造后析构。
3.虚成员函数(必须为非静态函数):它的功能是在基类中定义的虚函数,子类可根据自身情况进行覆写以达到不同的需求。格式就是在函数前面加上virtual
4.虚析构函数(用的少):作用就是通过基类指针删除对象或者调用对象的析构函数,格式就是在~前加个virtual
5.纯虚函数与抽象类:当一个函数虚到只有一个函数名是重要的时候,会以virtual 函数名 形参表=0的形式输出,而含有纯虚函数的类叫做抽象类,它具有以下特点:
6.每个子类都要把基类的全部纯虚函数都重写一遍,哪怕是空函数,注意是全部!
运算符重载
1.通过运算符重载,我们就可以实现有关类的一切运算
2.运算符重载有两种方式,一种是类的成员函数,一种是类的友元函数(在函数或者类前面加个friend代表此函数或者此类可以访问该类的成员及成员函数),前者的格式为:返回类型 operator& 需要重载的运算符(除了本类外的其他参数或类){实现过程}(注意*this代表本函数的指针),后者的格式就是在前者格式的最前面加一个friend在参数多加一个类)
3.本快知识就是模板,笔者做过一道题,读者可以参考一下,模板和方法比较全:
【问题描述】实现Mystring类,类结构如下
class MyString{
private:
char str[1024];
unsigned len;/*字符串长度*/
public:
MyString()
MyString& operator=(const char *mstr)/*常量字符串赋值*/
MyString& operator=(const MyString mstr)/*同类型赋值*/
MyString operator+(const MyString mstr)/*字符串拼接*/
char &operator [](int i)/*查询串内字符*/
bool operator==(const MyString mstr)/*判断是否相等*/
bool operator!=(const MyString mstr)/*判断是否不等*/
void operator+=(const MyString mstr)/*字符串拼接赋值*/
bool operator>(const MyString mstr)/*按典序比较*/
bool operator<(const MyString mstr)}/*同上*/
friend ostream &operator<<(ostream &out,const MyString mstr);/*友元输出流符号重载*/
};
主函数结构如下:
int main()
{
char ts[1024];
cin>>ts;
MyString s;
s = ts;
cin>>ts;
MyString ss;
ss = ts;
if(ss == s)
cout<<"equal"<<endl;
if(ss != s)
{
cout<<"Not equal"<<endl;
if(s > ss)
cout<<"s da yu ss"<<endl;
if(s < ss)
cout<<"s xiao yu ss"<<endl;
}
ss += s;
MyString sss;
sss = s + ss;
sss[0] = '$';
cout<<sss<<endl;
return 0;
}
#请勿修改主函数,请勿使用C++的string类#
【输入形式】两个字符串,以换行隔开;
【输出形式】调用所给main函数
【样例输入】
abcd
abcde
【样例输出】
Not equal
s xiao yu ss
$bcdabcdeabcd
运算符重载 · 王赫辰/c语言 - Gitee.com
相关文章:

对于c++的总结与思考
笔者觉得好用的学习方法:模板法 1.采用原因:由于刚从c语言面向过程的学习中解脱出来,立即把思路从面向过程转到面向对象肯定不现实,加之全新的复杂语法与操作,着实给新手学习这门语言带来了不小的困难。所以ÿ…...
Flask 账号详情展示
Flask 账号详情展示 这段代码是一个基于Flask框架的Python应用程序。 它包含了两部分代码:Python代码和HTML代码。 web/templates/common/tab_account.html <div class"row border-bottom"><div class"col-lg-12"><div cla…...

软件测试/测试开发丨Pytest 参数化用例
参数化 通过参数的方式传递数据,从而实现数据和脚本分离。并且可以实现用例的重复生成与执行。 参数化应用场景 测试登录场景 测试登录成功,登录失败(账号错误,密码错误)创建多种账号: 中⽂文账号,英⽂文账号 普通测试用例方法 …...

MATLAB中./和/,.*和*,.^和^的区别
MATLAB中./和/,.*和*,.^ 和^ 的区别 MATLAB中./和/,.*和*,.^ 和^ 的区别./ 和 / 的区别.//实验实验结果 .* 和 * 的区别.**实验实验结果 .^ 和^ 的区别.^n^n实验运行结果 MATLAB中./和/,.和,.^ 和^ 的区别 …...

Flask 与微信小程序对接
Flask 与微信小程序的对接 在 web/controllers/api中增建py文件,主要是给微信小程序使用的。 web/controllers/init.py # -*- coding: utf-8 -*- from flask import Blueprint route_api Blueprint( api_page,__name__ )route_api.route("/") def ind…...

node.js express框架开发入门教程
文章目录 前言一、Express 生成器(express-generator)二、快速安装1.express框架express-generator生成器安装2.使用pug视图引擎创建项目,projectName 为项目名称自定义 三、安装热更新插件 nodemon四、目录结构1. public文件夹2.routes路由其他请求方式…...

Spring系列学习二、Spring框架的环境配置
Spring框架的环境配置 一、Java环境配置二、 Spring框架的安装与配置三、Maven与Gradle环境的配置四、IDE环境配置(Eclipse与IntelliJ IDEA)五、结语 一、Java环境配置 所有编程旅程总是得从基础开始,如同乐高积木大作的基座,首先…...

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本
OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…...
ubuntu 安装docker GPG error缺少公钥解决方法
文章目录 报错信息解决方案 报错信息 W: GPG error: http://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8 E: The repository ‘http:…...

Laravel的知识点
1.{{ }} 是在 HTML 中内嵌 PHP 的 Blade 语法标识符,表示包含在该区块内的代码都将使用 PHP 来编译运行。 2.两种写法 3.return void 在这段注释中,"return void" 表示该函数或方法没有返回值。这意味着它执行某些操作或任务,但…...
STM32 基础知识(探索者开发板)--103讲 通用定时器
定时器溢出时间计算方法: Tout ((arr 1) * (psc 1)) / Ft us arr:自动重装载值 psc:时钟预分频数 定时器相关实验通用步骤 1.定时器初始化 a.定义结构体句柄 b.设基地址 c.设分频系数 d.设自动重装载值 e. 设计数模式 f.初始化定时器 2.外设模式配置 a.设置模式 d.映…...
mysqld_exporter使用
下载自己解压好 https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz在需要监控的数据库上执行 CREATE USER monit_test* IDENTIFIED BY Sfn4ZCHsK WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATI…...
Java 解决远程调用 ssl 证书认证问题
Java 解决远程调用 ssl 证书认证问题 方法 1方法 2方法 3 方法 1 在 jdk 目录导入证书。 首先要下载 服务器 ssl 证书,下载完成之后。把它命名成 Root.cer 后面使用 cmd 命令行 在 jdk 目录导入。 例如 : jdk 的目录为:D:\JetBranins\Intel…...

kubernetes(k8s) Yaml 文件详解
YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读。 1、查看API 资源版本标签 kubectl api-versions 2、编写资源配置清单 kubectl create -f nginx-test.yaml --validatefalse 2.3 查看创建的po…...

手拉手后端Springboot整合JWT
环境介绍 技术栈 springbootmybatis-plusmysqljava-jwt 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 Json Web令牌简称JWT Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。…...

小狐狸GPT付费2.4.9 去除授权弹窗版
后台安装步骤: 1、在宝塔新建个站点,php版本使用7.2 、 7.3 或 7.4,把压缩包上传到站点根目录,运行目录设置为/public 2、导入数据库文件,数据库文件是 /db.sql 3、修改数据库连接配置,配置文件是/.env 4、…...

Scrapy爬虫中合理使用time.sleep和Request
概述 在Scrapy爬虫中,我们需要深入分析time.sleep和Request对象对并发请求的影响。time.sleep函数用于在发起请求之前等待一段时间,而Request对象用于发送HTTP请求。我们必须仔细考虑这些操作对其他并发请求的潜在影响,以及在异步情况下可能…...

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo
Spring Cloud系列断更了有一段时间了,这段时间最近都在忙着项目上的事,天天修复bug以及调整需求,反正各种操劳,了解业务需求,然后开发相关功能,很久都没碰Spring Cloud系列的相关文章了,最近回头…...
mysql-5.6.16的内存泄漏问题
一、背景 有一台物理机上一个版本为5.6.16的从库出现了内存的增高,观测其日志可以发现,这台数据库已经oom很多次了,并且stop slave的时候会卡住非常长的时间才能停止 二、根本原因 上述的现象可以看到是一个明显的内存泄漏现象,…...

相机内参标定理论篇------相机模型选择
相机种类: 当拿到一款需要标定内参的相机时,第一个问题就是选择那种的相机模型。工程上相机类型的划分并不是十分严格,一般来说根据相机FOV可以把相机大概分为以下几类: 长焦相机:< 标准相机:~&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...