photoshop下载/广东seo推广外包
笔者觉得好用的学习方法:模板法
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可以把相机大概分为以下几类: 长焦相机:< 标准相机:~&…...

java设计模式学习之【状态模式】
文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动,播放器可能处于不同的状态:播放、暂停、缓冲或结束。每个状态下,播放…...

使用aspose.Words更新表格列宽
public static bool UpdateTableStyle(string filePath) { try { Document doc new Document(); //样式 Style style doc.Styles.Add(StyleType.Paragraph, "cellStyle"); style.Font.Name "simsun"; PageSetup pageSet doc.Sections[0].PageSetup; pa…...

pycharm 工具栏不见了
新版pycharm后, 菜单栏和工具栏不见了 目录 我发现的解决方法: 其他旧版的解决方法: 我发现的解决方法: 其他旧版的解决方法: 另外,一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作ÿ…...

图灵日记之java奇妙历险记--类和对象
目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…...

Kotlin 枚举类
使用 enum 修饰符;每个枚举常量都是一个对象,枚举常量以逗号分隔 // 枚举类 enum class Direction {NORTH, SOUTH, WEST, EAST }// 每一个枚举都是枚举类的实例,所以可以这样初始化 enum class Color(val rgb: Int) {RED(0xFF0000),GREEN(0x…...

可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程
源码简介 Leadshop是一款出色的开源电商系统,具备轻量级、高性能的特点,并提供持续更新和迭代服务。该系统采用前后端分离架构(uniappyii2.0),以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、V…...

Qt底层机制之对象树总结
Qt对象树是Qt框架中的一个重要概念,它用于管理对象之间的关系和生命周期。除了常规的对象树结构,Qt还提供了一些特殊的用法来扩展对象树的功能和灵活性。 1. 父子关系:Qt对象树通过设置父对象来建立父子关系。父对象负责管理子对象的内存分配和释放。这种关系可以通过`setP…...

QT C++ TCP Socket 请求心知天气
0.0 相关连接代码部分头文件具体实现 相关连接 心知天气官方天气图标 心知天气官网 代码部分 头文件 #include <QtNetwork> #include <QNetworkAccessManager> #include <QDebug> #include <QJsonValue> #include <QJsonArray> #include &l…...

双向链表的实现及头尾插入删除
双链表的增删查改 一.双向链表的初始化二.创建返回链表的头结点三.双向链表销毁四. 双向链表打印五.双向链表尾插六. 双向链表尾删七. 双向链表头插八.双向链表头删九.双向链表的查找十.双向链表在pos的前面进行插入十一. 双向链表删除pos位置的节点 一.双向链表的初始化 Lis…...

C语言—每日选择题—Day62
第一题 1. 在使用标准C库时,下面哪个选项使用只读模式打开文件? A:fopen("foo.txt", "r") B:fopen("foo.txt", "r") C:fopen("foo.txt", "w") D…...