C++对象数组对象指针对象指针数组
一、对象数组
对象数组中的每一个元素都是同类的对象;
例1 对象数组成员的初始化
#include<iostream>
using namespace std;class Student
{
public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<<"num:"<<num<<endl;cout<<"name:"<<name<<endl;cout<<"sex:"<<sex<<endl;cout<<"+++++++++++++++++"<<endl;}
private:int num;string name;char sex;
};int main()
{Student Stud1;Stud1.display();//Stud1未初始化,打印的数据成员为内存脏数据Student Stud2(2078, "wang", 'm');Stud2.display();Student Stud3[20];Stud3[0].display();//Stud3[0]未初始化,打印的数据成员为内存脏数据Student Stud4[3]= //对象数组的初始化{Student(1001,"He",'m'), //对象数组成员的初始化Student(1002,"You",'f'), //对象数组成员的初始化Student(1003,"She",'f') //对象数组成员的初始化};Stud4[0].display();Stud4[1].display();Stud4[2].display();return 0;
}
例2 对象数组应用
#include<iostream>
using namespace std;class Box
{
public:Box(int h=10,int w=12,int len=15):height(h),width(w),length(len) {};//构造函数初始化int volume( );
private:int height;int width;int length;
};int Box::volume( )
{
return(height*width*length);
}int main( )
{Box a[3]={Box(), //10*12*15 = 1800Box(15,18), //15*18*15 = 4050Box(16,20,26) //16*20*26 = 8320};cout<<"volume of a[0] is "<<a[0].volume( )<<endl;cout<<"volume of a[1] is "<<a[1].volume( )<<endl;cout<<"volume of a[2] is "<<a[2].volume( )<<endl;return 0;
}
二、对象指针
(一)指向对象的指针
在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。
可以定义一个指针变量,用来存放对象的指针。
class Time{……};
Time time1;Time *pt; //格式 类名 *对象指针
pt = &time1; //格式 pt就是指向Time类对象的指针变量
并且可以通过对象指针访问对象和对象的成员。
*pt
(*pt).hour或pt->hour //即t1.hour
(*pt).showtime()或pt->showtime() //即time1.showtime( )
(二)指向对象数据成员的指针
对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。
定义指向对象数据成员的指针变量的方法和定义指向普通变量的指针变量方法相同。
通过指向对象数据成员的指针变量访问成员
注:对象数据成员为私有时,则无法通过指针访问
int *p1; //一般形式:数据类型名 *指针变量名;
p1=&time1.hour;cout<<*p1<<endl;
(三)指向对象成员函数的指针
指向一般函数的函数指针,如下:
int (*pf)();
p1=fun;
cout<<(*pf)();
1 “定义”指向类成员函数的指针变量
函数返回类型名 (类名∷*函数指针变量名)(参数表列);
void (Time∷*pf)( );
2 “指向”一个成员函数的方法
函数指针变量名 = &类名∷成员函数名;【注意:这里用类名,而非函数名】
pf = &Time∷showtime;
3 通过指向对象中成员函数的指针,调用员函数
(对象名.*函数指针变量名)();
(time.*pf)();
例3 对象指针&对象数据成员指针&对象成员函数指针综合实例
#include <iostream>
using namespace std;class Time
{
public:Time(int,int,int);void get_time( );void showtime();
//private:
public: //若为private,则不可通过指针访问(对象指针,对象数据指针均不可访问private)int hour,minute,sec;
};
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){};void Time::showtime()
{cout<<"hour:"<<hour<<" minute:"<<minute<< " second:"<<sec<<endl; cout<<"++++++++++++"<<endl;
}void Time::get_time( )
{cout<<hour<<":"<<minute<<":" <<sec<<endl;
}
int main( )
{Time time1(10,11,12);Time *pt1; //对象指针pt1 = &time1;pt1->showtime();pt1->hour = 9;pt1->minute = 10;(*pt1).sec = 11;(*pt1).showtime();int *p1,*p2,*p3; //指向对象数据成员的指针p1 = &time1.hour;p2 = &time1.minute;p3 = &time1.sec;*p1 = 8;*p2 = 9;*p3 = 10;time1.showtime();Time time2(7,8,9);void(Time::*pf)(); //指向对象成员函数的指针pf = &Time::showtime; //注意,这里是类名,而非对象名 &time1.showtime(time2.*pf)();return 0;
}
三、对象数组vs对象指针数组
为提高内存的利用率,内存需要被动态的建立和释放
new运算符:动态分配内存;
delete运算符:释放内存。
用new运算符动态地分配内存后,将返回一个指向新对象的指针的值(内存地址,大小4字节),用户通过这个地址来访问对象。
注:
1)通过new建立的对象,由于未定义对象名,只能通过指针来访问;
2)建立对象时会自动执行构造函数;
3)系统内存不足,会出现异常。
Time *pt1=new Time;Time *pt2;
pt2=new Time(8,29,59);
pt2->show_time();
不再需要由new建立的对象时,用delete运算符释放
delete pt1;
注:在释放内存空间之前,自动调用析构函数,完成有关善后清理工作。
例4 对象的申请和释放
#include<iostream>
using namespace std;
class Box
{
public:Box(int w,int l,int h);~Box();int width;int length;int height;
};Box::Box(int w,int l,int h)
{width=w;length=l;height=h;cout<<"========调用构造函数=======\n";
}
Box::~Box()
{cout<<"========调用析构函数=======\n";
}int main()
{Box * pt = new Box(12,13,14);cout<<pt->width<<"\n";cout<<pt->length<<"\n";cout<<pt->height<<endl;delete pt; //如果不delete pt,则不会执行析构函数return 0;
}
(一)使用new建立动态对象数组成员
int n;
Time *pt;
cin>>n;
pt = new Time[n];
……
delete []pt;
(二)对象指针数组
一个指针只占用4个字节,因此相比于建立数组或对象数组,指针数组的方式更节省空间;
建立占用空间小的指针数组,灵活处理占用空间大的对象集合。
const int N = 100;
Time *pt[N]={NULL};
int i;
……
i=3;
if(pt[i]==NULL)
pt[i] = new Time(10, 10,10);
……
if(pt[i]!=NULL)
delete pt[i];
相关文章:
C++对象数组对象指针对象指针数组
一、对象数组 对象数组中的每一个元素都是同类的对象; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…...
主曲率为常数时曲面分类
主曲率为常数 ⇔ K , H \Leftrightarrow K,H ⇔K,H 为常数,曲面分类: 1.若 k 1 k 2 0 k_1k_20 k1k20,则 S S S为全脐点曲面——平面的一部分; 2.若 k 1 k 2 ≠ 0 k_1k_2\neq0 k1k20,则 S S S为全脐点曲面——球面的一部分&…...
单片机:实现HC-SR04超声波测距(附带源码)
使用单片机实现 HC-SR04 超声波测距模块 的功能,通常用于测量物体与超声波传感器之间的距离。HC-SR04 模块通过发射超声波信号并测量其返回时间来计算距离。单片机(如 STM32、51 系列、Arduino 等)可用来控制该模块的工作,并处理返…...
分布式全文检索引擎ElasticSearch-数据的写入存储底层原理
一、数据写入的核心流程 当向 ES 索引写入数据时,整体流程如下: 1、客户端发送写入请求 客户端向 ES 集群的任意节点(称为协调节点,Coordinating Node)发送一个写入请求,比如 index(插入或更…...
mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…...
ChatGPT生成接口测试用例(一)
用ChatGPT做软件测试 接口测试在软件开发生命周期中扮演着至关重要的角色,有助于验证不同模块之间的交互是否正确。若协议消息被恶意修改,系统是否能够恰当处理,以确保系统的功能正常运行,不会出现宕机或者安全问题。 5.1 ChatGP…...
Jenkins 中 写 shell 命令执行失败,检测失败问题
由于项目的 依赖复杂,随着版本的增多,人工操作,手误几率太大,我们选取kenins 来自动化发布、更新。 这里主要解决,发布 的 每个阶段,确保每个阶段执行成功。 比如: js 运行,…...
Dot Foods EDI 需求分析及对接流程
Dot Foods 是一家美国领先的食品和非食品产品的中间批发分销商,主要为食品服务、零售和分销行业的客户提供服务,是北美大型食品中间分销商之一。Dot Foods (以下简称 Dot)的业务模式是通过整合多个供应商的产品,为客户…...
数据特性库 前言
文章目录 一、num-traits库简介二、核心功能三、更新功能四、使用方式五、应用示例六、结论 一、num-traits库简介 num-traits是Rust编程语言中的一个开源库,专注于为数值类型提供一系列的数学运算特性和接口。它支持泛型数学计算,允许开发者在不指定具…...
项目授权无法正常操作的解决方法
概述 在非saas环境的项目中,授权页面的接口不需要token,但是在某些时候会导致页面无法正常操作,暂时用该文档中的解决方法来处理,后续会修复该问题。 现象描述 登录时报未授权跳转至该页面,有时该页面会弹出登录超时对…...
python学opencv|读取图像(十七)认识alpha通道
【1】引言 前序学习进程中,我们已经掌握了RGB和HSV图像的通道拆分和合并,获得了很多意想不到的效果,相关链接包括且不限于: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读…...
WSL2安装到自定义盘教程(非先安装后打包)
step1:环境配置 按照官方教程从头到尾配置一遍,直到从微软商店下载好Ubuntu20.04为止 step2:拷贝下载内容 使用微软商店下载的应用安装包会默认保存在C:\Program Files\WindowsApps目录下 在该目录下找到以CanonicalGroupLimited开头的文…...
环境变量的知识
目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…...
【python】OpenCV—Image Moments
文章目录 1、功能描述2、图像矩3、代码实现4、效果展示5、完整代码6、涉及到的库函数cv2.moments 7、参考 1、功能描述 计算图像的矩,以质心为例 2、图像矩 什么叫图像的矩,在数字图像处理中有什么作用? - 谢博琛的回答 - 知乎 https://ww…...
优化 HTTP 接口请求:缓存策略与实现方法
前言 在前端开发中,HTTP 请求的处理是至关重要的一环。Axios 作为一个流行的 HTTP 客户端,其简洁性和灵活性使得它广受开发者青睐。然而,为了优化应用性能和提升用户体验,合理地缓存请求结果显得尤为重要。本文将深入探讨如何在 …...
图形 3.3 曲面细分与几何着色器_大规模草渲染
细分后的顶点曲面细分与几何着色器 大规模草渲染 B站视频:图形 3.3 曲面细分与几何着色器 大规模草渲染 文章目录 细分后的顶点曲面细分与几何着色器 大规模草渲染着色器执行顺序曲面细分着色器概述曲线和曲面相关概念输入与输出总体流程Hull Shader常量外壳着色器…...
shell8
until循环(条件为假的时候一直循环和while相反) i0 until [ ! $i -lt 10 ] doecho $i((i)) done分析 初始化变量: i0:将变量i初始化为0。 条件判断 (until 循环): until [ ! $i -lt 10 ]:这里的逻辑有些复杂。它使用了until循环…...
嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏
eDP是嵌入式显示端口,具有高数据传输速率,高带宽,高分辨率、高刷新率、低电压、简化接口数量等特点。现大多数笔记本电脑都是用的这种接口。整个eDP是很复杂的,这里我们不讲底层原理,我们先掌握如何用泰山派来驱动各种…...
2024年华为OD机试真题-字符串分割-C++-OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 给定非空字符串…...
图书馆管理系统(三)基于jquery、ajax
任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面,这里我分别制作了两个网页分别用来借书和还书。此页面,也是通过获取books.txt内容然后添加到表格中,但是借还的操作没有添加到后端中去,只是一个简单的前端操作。…...
【练习Day20】字符串变形
链接:字符串变形_牛客题霸_牛客网 方法一:双逆转(推荐使用) 思路: 将单词位置的反转,那肯定前后都是逆序,不如我们先将整个字符串反转,这样是不是单词的位置也就随之反转了。但是单…...
鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用
鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用 在鸿蒙技术完成云捐助项目中,物联网技术也是具有一定生命力的存在。这里也会在云捐助项目中使用物联网的技术。 一、华为云IoT物联网操作 这里以华为云的Iot物联网操作来介绍华为云I ot物联网技术。 这里从百度…...
Linux设置篇
查看主机名 hostname 修改主机名 hostnamectl set-hostname 主机名 配置ip映射 vi /etc/hosts 192.168.1.10 pure 限制SSH登录的IP a) 设置禁止所有ip连接服务器的SSH vi /etc/hosts.deny sshd:all:deny b) 设置允许指定ip连接服务器的SSH(这边建议设置一个备…...
WatchAlert - 开源多数据源告警引擎
概述 在现代 IT 环境中,监控和告警是确保系统稳定性和可靠性的关键环节。然而,随着业务规模的扩大和数据源的多样化,传统的单一数据源告警系统已经无法满足复杂的需求。为了解决这一问题,我开发了一个开源的多数据源告警引擎——…...
百度面试手撕 go context channel部分学习
题目 手撕 对无序的切片查询指定数 使用context进行子协程的销毁 并且进行超时处理。 全局变量定义 var (startLoc int64(0) // --- 未处理切片数据起始位置endLoc int64(0) // --- 切片数据右边界 避免越界offset int64(0) // --- 根据切片和协程数量 在主线程 动态设…...
主流浏览器内核
1、Chromium内核 由Google主导开发,最具代表性的是Google Chrome浏览器。Chromium内核的优点包括无广告、不易崩溃、速度快、安全性高。目前,许多浏览器都采用了Chromium内核,如360极速浏览器、UC浏览器、QQ浏览器等,windows自…...
Apache Tomcat 漏洞CVE-2024-50379条件竞争文件上传漏洞 servlet readonly spring boot 修复方式
1,关于漏洞 Apache Tomcat是一个流行的开源 Web 服务器和 Java Servlet 容器。 二、 漏洞描述 Apache Tomcat中修复了个 TOCTOU 竞争条件远程代码执行漏洞 (CVE-2024-50379),该漏洞的 CVSS 评分为 9.8。Apache Tomcat 中 JSP 编译期间存在检查时间使用时…...
Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)
Java LinkedList(链表)语法知识点及案例代码 一、LinkedList概述 LinkedList是Java集合框架中的一个类,位于java.util包中。它实现了List、Deque、Queue等接口,提供了链表数据结构的实现。链表是一种线性数据结构,其…...
3分钟读懂数据分析的流程是什么
数据分析是基于商业目的,有目的地进行收集、整理、加工和分析数据,提炼出有价值的 信息的一个过程。整个过程大致可分为五个阶段,具体如下图所示。 1.明确目的和思路 在开展数据分析之前,我们必须要搞清楚几个问题,比…...
【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变
问题背景 给定一个整数数组 n u m s nums nums,处理以下类型的多个查询: 计算索引 l e f t left left 和 r i g h t right right(包含 l e f t left left 和 r i g h t right right)之间的 n u m s nums nums 元素的 和 &a…...
Leecode刷题C语言之同位字符串连接的最小长度
执行结果:通过 执行用时和内存消耗如下: bool check(char *s, int m) {int n strlen(s), count0[26] {0};for (int j 0; j < n; j m) {int count1[26] {0};for (int k j; k < j m; k) {count1[s[k] - a];}if (j > 0 && memcmp(count0, cou…...
API开发:Flask VS FastAPI
在当今的Web开发领域,选择合适的框架对于构建高效、稳定且易于维护的API至关重要。Flask和FastAPI是两个备受关注的Python Web框架,它们各自具有独特的特点和优势,适用于不同的开发场景。 文章目录 一、简介二、性能表现三、开发效率…...
fastAPI接口的请求与响应——基础
1. 后端接口 1.接口实现 pip install fastapi pip install uvicorn# api.py from pydantic import BaseModel from fastapi import FastAPI import uvicorn import os# 定义请求体模型 class Payload(BaseModel):key1: strkey2: str# 创建一个FastAPI应用程序实例 app Fast…...
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
python有哪些关键字_keyword_list_列表_reserved_words 回忆上次内容 hello world 不是 从来就有的 来自于 c语言 print、小括号 和 双引号 也来自于 c语言 添加图片注释,不超过 140 字(可选) python 标识符 的 命名规则 依然 完全 学习…...
面试题整理2---Nginx 性能优化全方案
面试题整理2---Nginx 性能优化全方案 1. 调整工作进程数和线程数1.1 调整工作进程数1.2 调整进程的最大连接数 2. 配置Gzip压缩2.2 配置Gzip压缩 3. 配置缓存策略3.1 配置浏览器缓存时间3.2 配置代理服务器缓存时间 4. 优化文件访问方式4.1 使用sendfile()函数发送文件数据4.2 …...
15.3、陷阱技术 入侵容忍 隐私保护技术
目录 网络攻击陷阱技术与应用蜜罐主机技术陷阱网络技术三代陷阱网络网络攻击陷阱技术应用入侵容忍及系统生存技术入侵容忍及系统生存技术应用隐私保护技术网络安全的前沿技术发展动向 网络攻击陷阱技术与应用 攻击陷阱技术也叫诱骗技术,它是一种主动防御的方法&…...
PyQt6 学习记录1
简介 PyQt6 是基于 Python 的一系列模块。它是一个多平台的工具包,可以在包括 Unix、Windows 和 Mac OS 在内的大部分主要操作系统上运行。 安装 pip install PyQt6 模块 - QtCore - QtGui - QtWidgets - QtDBus - QtNetwork - QtHelp - QtXml - QtSvg - QtSql…...
ModelArts平台打卡体验活动:MindSpore2.4.0快速入门
一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型,管理全周期AI工作流,选择下面的云平台以开始使用昇思MindSpore,可以在昇思教程中进入ModelArts官网 创建notebook,点击【打开】启动,进入ModelA…...
python学习——洛谷P2010 [NOIP2016 普及组] 回文日期 三种方法
[NOIP2016 普及组] 回文日期 文章目录 [NOIP2016 普及组] 回文日期题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示方法一方法二方法三 题目背景 NOIP2016 普及组 T2 题目描述 在日常生活中,通过年、月、日这…...
现代风格VUE3易支付用户控制中心
适用系统 彩虹易支付 技术栈 vitevue3elementuiplusphp 亮点 独立前端代码,扩展开发,不改动系统文件,不影响原版升级 支持功能订制 界面预览...
重生之我在异世界学智力题(9)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言时间旅行者的逻辑谜题题目描述&#…...
《Mycat核心技术》第05章:Mycat中文乱码解决方案
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
Flink执行模式(批和流)如何选择
DataStream API支持不同的运行时执行模式(batch/streaming),你可以根据自己的需求选择对应模式。 DataStream API的默认执行模式就是streaming,用于需要连续增量处理并且预计会一直保持在线的无界(数据源输入是无限的)作业。 而batch执行模式则用于有界(输入有限)作业…...
vue 文本域 展示的内容格式要和填写时保持一致
文本域 展示的内容格式要和填写时保持一致 <el-inputtype"textarea":rows"5"placeholder"请输入内容"v-model"formCredit.point"style"width:1010px;" > </el-input> 样式加个: white-space: pre-w…...
计算机基础知识复习12.20
B树与B树差异的点 叶子节点最底部的节点才会存放实际数据(索引记录),非叶子节点只会存放索引 所有索引都会在叶子节点出现,叶子节点之间构成一个有序链表 为什么mysql使用B树 单点查询:B树的非叶子节点不存放实际的记录数据,仅…...
Flash语音芯片相比OTP语音芯片的优势
Flash语音芯片和OTP语音芯片是两种常见的语音解决方案,在各自的应用领域中发挥着重要作用。本文将介绍Flash语音芯片相比OTP(One-Time Programmable)语音芯片的显著优势。 1.可重复擦写:Flash语音芯片的最大特点是支持多次编程和擦除,…...
深度学习模型中增加随机性可以通过多种方式实现,以下是一些可以应用到你的 `TCNAttentionLSTM`
在深度学习模型中增加随机性可以通过多种方式实现,以下是一些可以应用到你的TCNAttentionLSTM模型中的方法: ### 1. Dropout 你已经在模型中使用了dropout,这是增加随机性的一种常见方法。你可以通过调整dropout率来控制随机性的程度。 ###…...
JavaScript:一个争议与机遇并存的编程语言
JavaScript的诞生带着某种戏剧性色彩。1995年,网景公司的Brendan Eich在短短10天内设计出了这门语言。这种仓促的诞生为JavaScript埋下了许多设计缺陷的隐患,这些问题直到今天仍在困扰着开发者。然而,正是这样一个充满争议的语言,…...
后摩尔定律时代,什么将推动计算机性能优化的发展?
在摩尔定律时代,每两年芯片上的晶体管数量就会翻一番,这一看似不可避免的趋势被称为摩尔定律,它极大地促进了计算机性能的提高。然而,硅基晶体管不可能一直小下去,半导体晶体管的微型化推动了计算机性能的提升…...
台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
以下是开发台球助教系统客户端(APP,小程序,H5)几端的信息收藏功能的详细需求和功能说明,内容比较详细,可以说是一个教科书式的详细说明了,这套需求说明不仅仅用在我们的台球助教系统程序上&…...