C++程序设计学习笔记(二)

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

        这里主要是记录下面向对象相关的一些笔记心得。

一、面向对象的概念

1.结构化程序设计

        面向对象的概念出现之前,主要的设计方法是面向过程的设计方法,这种设计方法也叫结构化设计。结构化设计强调数据类型和数据结构,注重程序的易读性、可靠性和可维护性。

        我们常说的程序=数据结构+算法就体现了这种设计理念。

        主要的思想就是自顶向下、逐步求精及模块化。在实际的开发过程中通常会把一个非常复杂的程序分解成很多个小单元,然后使用函数来解决这些小单元中的问题。在这种设计思路下,我们需要考虑的就是程序的分解,函数之间的调用,函数的设计。程序设计的过程就是函数编写的过程。

2.面向对象思想程序设计

        在结构化设计的时候,强调的是”独立功能,单入口单出口“,当程序非常大的时候,不同的开发人员可能会定义很多功能相似的函数,包括分解程序的时候,也会定义很多全局变量等等,不同的开发人员可能会花大量的时间去熟悉函数之间的调用规则,命名规范等等,这无疑浪费了大量的时间和成本,后期的维护、排查、调试都讲变得困难,这个时候我们可能就有了函数复用、降低模块之间的耦合度的需求,这个时候,面向对象的设计应运而生。

        面向对象的主要特点就是把一些有共性的事物抽象成对象的概念。相同的对象有两个特性,一种是状态,另外一种是行为。在面向对象的概念中,对象的状态叫做属性,对象的行为叫做对对象的操作,在开发的过程中,对对象的操作一般是通过函数来实现的。

        提到面向对象就不得不说它的三个特点:继承、多态、封装。

        当然在有的书中,把抽象也当成了面向对象的一个特点。抽象就是讲同一类事物的共同特点概括出来。抽象的意义就在于把有相同属性的事物归纳、划分为某个类,例如学生类、员工类、动物类、教师类等等。

        当我们完成抽象之后,会将数据和对数据操作的函数放在一起作为一个类的定义。这个类的定义的过程叫做封装。在类的定义中,描述属性的数据叫做成员变量或者数据成员,函数成为成员函数。通过封装,我们可以把属性和成员函数联系起来,构成一个独立的单元。

        通过封装我们可以将对象的一部分属性或者实现细节隐藏起来,只给出如何使用的信息。

        当有新的类出现之后,我们可以通过继承,以设计好的类为基础,复用原来的类的代码,同时扩充和复用原来的类的目的。原来的类叫做父类,继承父类的类叫做子类。

        多态是值不同的对象都具有名称相同的行为,但是具体行为的实现方式却又所不同。比如说我们定义了比较两个数大小的函数,这个函数的参数既可以是整型,也可以是float,double或者字符串。

3.类的定义

        类定义的一般格式如下:

class 类名{

        访问范围限制符:

        成员变量1;

        成员变量2;

        成员函数声明1

        成员函数声明2

        访问范围限制符:

        成员变量3;

        成员变量4;

        成员函数声明3

        成员函数声明4

        ...

}

1.类名称的规范

        字母、数字、下划线的组合,大小写敏感,不能以数字开头,不能使用系统关键字,类名不能重复。

 2.类的访问限制符

1.public      表示这个属性或者方法是公共的,能访问这个类就可以访问到这个类的属性或者方法

2.private     表示这个属性或者方法是私有的,外部无法访问,仅在本类中可以访问。

3.protected  表示仅在本类或者子类能够访问具有protected访问权限的成员,访问权限介于public和protected之间。

        没有设置访问限制符的时候,默认访问修饰符是private。           

3.类定义实例

        例如我们定义个日期类IFLYDate,这个类中有year,month,day这几个属性。

        同时我们定义了一些外部访问的一些方法。

class IFLYDate {
private:int year,month,day;
public:IFLYDate();IFLYDate(int,int,int);void setDate(int,int,int);void getDate(IFLYDate);IFLYDate getDate();void setYear(int);void setMonth(int);void setDay(int);int getYear();int getMonth();int getDay();void printDate() const;    //打印信息
};

       在上述的代码中,::是类作用域运算符,后面的成员函数属于类名标识的这个类。具体类的实现格式如下:

返回值类型 类名::成员函数名(参数列表){

        成员函数的函数体

}

        在上面的例子中,我们可以用下面的代码实现在类中定义的函数。

IFLYDate::IFLYDate(){year = 1970;month = 1;day = 1;
}
IFLYDate::IFLYDate(int y,int m,int d){year = y;month = m;day = d;
}void IFLYDate::setYear(int year){year = year;
}
void IFLYDate::setMonth(int month){month = month;
}
void IFLYDate::setDay(int day){day = day;
}
int IFLYDate::getYear(){return year;
}
int IFLYDate::getMonth(){return month;
}
int IFLYDate::getDay(){return day;
}
void IFLYDate::printDate()const{cout<<year<<"/"<<month<<"/"<<day;
}

4.类的创建

        类的访问方式有以下两种方式:

1.第一种类的访问方式

类名 对象名(参数);//第一种方式

类名 对象名();         //第二种方式

类名 对象名 = 类名(参数);//第三种方式

如果我们想访问上面定义的IFLYDate类,代码如下:

    IFLYDate date;IFLYDate(2024, 2, 21);IFLYDate newDate = IFLYDate(2024, 2, 21);
2.指针的访问方式

类名 *对象指针名 = new 类名;//第一种方式

类名 *对象指针名 = new 类名();//第二种方式

类名 *对象指针名 = new 类名(参数);//第三种方式

        如果我们想访问上面定义的IFLYDate类,代码如下:

    IFLYDate * date    = new IFLYDate;IFLYDate * newDate = new  IFLYDate();IFLYDate * oneDate = new IFLYDate(2024, 2, 21);

        这里需要注意的是,使用new创建的对象,必须用delete来撤销。

5.访问对象的成员

1.使用对象访问成员变量与调用成员函数

        通过对象访问成员变量与调用成员函数的一般格式如下:

对象名.成员变量名

对象名.成员函数名(参数)

        还以上面定义的MyDate类为例,我们可以通过夏敏的代码访问对象的成员和函数。

    IFLYDate date = IFLYDate();int year = date.getYear();int month = date.getMonth();int day = date.getDay();cout<<"year:"<<year<<"\tmonth:"<<month<<"\tday:"<<day<<"\n";date.printDate();
2.使用指针访问成员变量与调用成员函数

        除了通过第一种方式访问对象的成员变量和调用成员函数之外,我们还可以通过指针的方式访问对象的成员变量和调用成员函数。使用指针的方式访问时,我们可以使用下面的代码,达到相同的效果。使用指针的是时候,我们使用”->“来实现。

    IFLYDate * date = new IFLYDate();int year = date->getYear();int month = date->getMonth();int day = date->getDay();cout<<"year:"<<year<<"\tmonth:"<<month<<"\tday:"<<day<<"\n";date->printDate();
3.使用引用访问成员变量和调用成员函数

        我们还以在程序中直接定义引用并进行初始化。     1221231

    IFLYDate date = IFLYDate();IFLYDate &myDate = date;int year = myDate.getYear();int month = myDate.getMonth();int day = myDate.getDay();cout<<"year:"<<year<<"\tmonth:"<<month<<"\tday:"<<day<<"\n";myDate.printDate();

二、总结

        对象的两个特性:状态和行为。状态指的是对象本身的信息,也称为属性;行为是对对象的操作。C++中使用对象名、属性和操作三要素来描述对象。用数据表示对象的属性,用函数来实现操作。描述属性的数据称为成员变量,函数成为成员函数。对象=属性+成员函数。

        面向对象的三个特征:继承、多态、封装。

        对象的访问限制符:private、public、protected。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何基于prompt来构建大模型AI产品?

构建一个基于 prompt 的大型 AI 产品是可能的&#xff0c;尽管 prompt 本身是一个用于基本命令行交互的简单工具。但是&#xff0c;你可以借助它作为用户输入和输出的一种方式&#xff0c;并结合其他技术来实现更复杂的功能。下面是一个基本的步骤指南&#xff1a; 1、确定产品…

MybatisPlus--03--IService、ServiceImpl

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. IService接口1.1 IService、ServiceImpl 接口的使用第一步&#xff1a;实现basemapper接口第二步&#xff1a;编写service类第三步&#xff1a;编写serviceImpl第…

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

蓝桥杯备赛系列——倒计时50天!

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 **前缀和数组&#xff1a;**假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从…

【Python笔记-设计模式】工厂模式

一、说明 (一) 解决问题 提供了一种方式&#xff0c;在不指定具体类将要创建的情况下&#xff0c;将类的实例化操作延迟到子类中完成。可以实现客户端代码与具体类实现之间的解耦&#xff0c;使得系统更加灵活、可扩展和可维护。 (二) 使用场景 希望复用现有对象来节省系统…

Maven depoly:Skipping artifact deployment

问题描述&#xff1a; 使用IDEA执行mvn depoly将本地开发的模块发布到Maven私服时&#xff0c;一直提示&#xff1a;Skipping artifact deployment&#xff0c;自动跳过了depoly部署阶段。 问题分析 Maven构建生命周期中的每一个阶段都是由对应的maven插件执行具体工作的。既然…

使用IDEA创建spring boot web项目并测试运行

文章目录 准备工作构建项目1、通过Maven Archetype构建一个webapp项目2、添加 Spring Boot 所需依赖3、创建配置文件4、创建启动类5、创建web api 接口6、测试web api接口 准备工作 idea下载地址&#xff1a; https://www.jetbrains.com/idea/download/?sectionwindows java下…

关于torch.cuda.is_available() 返回False 详细说明及解决

一 cuda 环境检测失败 cuda 环境检测代码&#xff1a; import torchprint(torch.__version__) print(torch.cuda.is_available()) print(torch.version.cuda) cuda 环境检测代码执行结果如下图&#xff1a; 关键代码print(torch.cuda.is_available()) 返回 False 通常表示当…

C语言实现基础数据结构——栈

目录 栈 栈的实现 数组栈 数组栈的实现 栈的初始化 栈的销毁 数据入栈 判断栈是否为空 数据出栈 获取栈顶元素 获取栈内数据个数 项目实现 栈的基础练习 有效的括号 栈 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的…

后端设计PNR一点总结

条条大路通罗马 在追求极致PPA的过程中,时序问题总是可以解决 方法总比困难多 关键问题其实就是控制delay 不多不少,简单总结二十一条(欢迎大家评论区继续发挥): module padding的设置,可以有效解决congestion问题,factor自己try,命令:setPlaceMode -place_global…

代码随想录算法训练营Day40 | 343.整数拆分、96.不同的二叉搜索树

343.整数拆分 &#xff08;初见甚至看不出为什么这题是动规&#xff09; 本题大体思路是一个数可以被拆成两个或更多的数&#xff0c;而该数的最大乘积能由其拆成的数递推得到 注意点主要在于理解dp数组的定义 1、DP数组定义&#xff1a;一维数组&#xff0c;dp[i]表示 n i…

java.lang.IllegalStateException: Promise already completed.

spark submit 提交作业的时候提示Promise already complete 完整日志如下 File "/data5/hadoop/yarn/local/usercache/processuser/appcache/application_1706192609294_136972/container_e41_1706192609294_136972_02_000001/py4j-0.10.6-src.zip/py4j/protocol.py"…

Draw.io绘制UML图教程

一、draw.io介绍 1、draw.io简介 draw.io 是一款强大的免费在线图表绘制工具&#xff0c;支持创建流程图、组织结构图、时序图等多种图表类型。它提供丰富的形状库、强大的文本编辑和样式设置功能&#xff0c;使用户能够轻松创建专业级图表。draw.io 具有用户友好的界面&…

LeetCode 热题 100 | 二叉树(终)

目录 1 二叉树小结 1.1 模式一 1.2 模式二 2 236. 二叉树的最近公共祖先 3 124. 二叉树中的最大路径和 菜鸟做题&#xff08;返校版&#xff09;&#xff0c;语言是 C 1 二叉树小结 菜鸟碎碎念 通过对二叉树的练习&#xff0c;我对 “递归” 有了一些肤浅的理解。…

【激光SLAM】基于滤波的激光SLAM方法(Grid-based)

Filter-based SLAM 贝叶斯滤波数学概念贝叶斯滤波特性贝叶斯滤波的推导 粒子滤波&#xff08;Particle filter&#xff09;特性流程状态传播权重评估重采样算法流程存在的问题 FastSLAM的原理及优化FastSLAM介绍算法流程FastSLAM优化存在的问题及优化进一步优化proposal分布最终…

RabbitMQ学习整理————基于RabbitMQ实现RPC

基于RabbitMQ实现RPC 前言什么是RPCRabbitMQ如何实现RPCRPC简单示例通过Spring AMQP实现RPC 前言 这边参考了RabbitMQ的官网&#xff0c;想整理一篇关于RabbitMQ实现RPC调用的博客&#xff0c;打算把两种实现RPC调用的都整理一下&#xff0c;一个是使用官方提供的一个Java cli…

思维模型整合

思维模型整合 4P--- 4C思考模型能力圈模型 4P— 4C思考模型 在竞争激烈的今天&#xff0c;每个赛道都有众多可以为客户提供相同价值的对手&#xff0c;而赛道中的佼佼者之所以能打败大部分人&#xff0c;可能并不是他们能比别人更能讨好大众&#xff0c;而是因为在这个赛道它有…

Jmeter学习系列之六:阶梯加压线程组Stepping Thread Group详解

性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间。 在jmeter中,有这样一个插件,可以帮我们实现这个功能,这个插件就是:Stepping Thread Group 1、下载配置方法 1.1.下载配置 插件下载地址:…

Qt读写局域网共享文件夹

Qt读写局域网共享文件夹 #include "widget.h" #include "ui_widget.h"#include <QDir> #include <QSettings>//Qt读取局域网共享文件夹文件内容 解决不同网段无法访问共享文件夹问题 //使用QDir或QFile等都可以直接访问局域网共享文件. //路径…

Selenium定位不到元素怎么办?一定要这么做

在使用Selenium进行自动化测试时&#xff0c;碰到无法定位元素该怎么办&#xff1f;这里总结了9种情况下的元素定位方法&#xff1a; 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位&#xff0c;对于frame/iframe表单内嵌的页面元素无法直接定位。 解决…