C++ 封装的用法
C++(七)封装
封装,可以达到,对外提供接口,屏蔽数据,对内开放数据。
权限控制
struct 中所有行为和属性都是 public 的(默认),此举也是为了 C++兼容 C 语言,
因为 C 语言中没有权限的概念。
C++中的 class 可以指定行为和属性的访问方式,默认为 private,此举要求你必
须指定权限,不然就没有办法外部访问。
| 访问属性 | 属性 | 对象内部 | 对象外部 |
|---|---|---|---|
| public | 公有 | 可访问 | 可访问 |
| private | 私有 | 可访问 | 不可访问 |
初步使用封装:
#include <iostream>
#include <string.h>
using namespace std;class Stack{
public:void init();bool isEmpty();bool isFull();void push(int data);int pop();
private:int space[1024];int top;
};void Stack::init()
{memset(space,0,sizeof(space));top = 0;
}
bool Stack::isEmpty()
{return top == 0;
}
bool Stack::isFull()
{return top == 1024;
}
void Stack::push(int data)
{space[top++] = data;
}
int Stack::pop()
{return space[--top];
}int main(){Stack s;s.init();if(!s.isFull())s.push(10);if(!s.isFull())s.push(20);if(!s.isFull())s.push(30);if(!s.isFull())s.push(40);while(!s.isEmpty())cout<<s.pop()<<endl;return 0;
}
class
构造器constructor
构造器是类的初始化函数,当对象被创建时,系统自动调用构造器进行初始化。
无返回值 可以有参数
构造器可以有默认参数,可以被重载
系统提供的默认构造器,当没有自定义构造器时,系统会自动生成一个默认构造器。
无论重载还是默认参数,都应该将无参的空体构造器包含进来
生成的无参的对象,是一种比较常见的现象,对象数组;
#include <iostream>
#include <string.h>
using namespace std;class Stack{
public:Stack(){top = 0;size = 1024;space = new int[1024];memset(space, 0, sizeof(int)*1024);}Stack(int size){top = 0;this->size = size;space = new int[size];memset(space, 0, sizeof(int)*size);}//默认参数会在现在的代码中冲突
// Stack(int size=1024){
// top = 0;
// this->size = size;
// space = new int[size];
// memset(space, 0, sizeof(int)*size);
// }bool isEmpty();bool isFull();void push(int data);int pop();
private:int *space;int top;int size;
};bool Stack::isEmpty()
{return top == 0;
}
bool Stack::isFull()
{return top == size;
}
void Stack::push(int data)
{space[top++] = data;
}
int Stack::pop()
{return space[--top];
}int main(){Stack s(2);if(!s.isFull())s.push(10);if(!s.isFull())s.push(20);if(!s.isFull())s.push(30);if(!s.isFull())s.push(40);while(!s.isEmpty())cout<<s.pop()<<endl;return 0;
}
initial list 初始化列表
C++11 引入了初始化列表,可以用来初始化类成员变量。
*** 注意: 初始化的顺序与成员变量的声明顺序相同。与列表中赋值顺序无关。***
不能使用列表中初始化的成员,去初始化其他成员,做法很容易引发错误
必须用此格式来初始化引用数据。
必须用此格式来初始化非静态 const 数据成员(C++98)。
//列表只能初始化类成员变量,不能初始化局部变量Stack(int size): top(0), size(size), space(new int[size]){memset(space, 0, sizeof(int)*size);}Stack(int size): top(0), size(size), space(new int[size]{0}){}
析构器destructor
析构器是类的析构函数,
~开头与类名同的函数,在类对象销毁时(栈/堆对象),自动调用,
无返回值 不能有参数
析构器不能被重载
系统提供的默认析构器,当没有自定义析构器时,系统会自动生成一个默认析构器。
#include <iostream>
#include <string.h>
using namespace std;class Stack{
public:Stack(){top = 0;size = 1024;space = new int[1024];memset(space, 0, sizeof(int)*1024);}~Stack(){delete[] space;}private:int *space;int top;int size;
};
层次管理
#include <iostream>
#include <string.h>
using namespace std;
class Student
{
public:Student(int a, char* n ){cout<<"Constructor called"<<endl;_age = a;_name = new char[strlen(n)];strcpy(_name,n);}~Student(){cout<<"Destructor called"<<endl;delete []_name;}private:char *_name;int _age;
};
int main()
{Student s(10,"hello");Student *ps = new Student(10,"hello");delete ps;return 0;
}
分文件编程
myStack.h
//
// Created by gophe on 24-7-28.
//#ifndef CDEMO_MYSTACK_H
#define CDEMO_MYSTACK_Hclass myStack {
public:myStack();//myStack(int size);myStack(int size=10);//参数默认值只能在这定义,初始化列表在.cpp中定义~myStack();bool isEmpty();bool isFull();void push(int data);int pop();
private:int *space;int top;int size;
};#endif //CDEMO_MYSTACK_H
myStack.cpp
//
// Created by gophe on 24-7-28.
//#include "Headers/myStack.h"myStack::myStack(){top = 0;size = 100;space = new int[100];
}
// 上下两种均可
myStack::myStack():size(10),top(0),space(new int[10]){}myStack::myStack(int s)
{top = 0;size = s;space = new int[s];
}
// 上下两种均可
//初始化列表在.cpp中定义
myStack::myStack(int s):size(s),top(0),space(new int[s])
{
}myStack::~myStack()
{delete[] space;
}bool myStack::isEmpty()
{return top == 0;
}
bool myStack::isFull()
{return top == size;
}
void myStack::push(int data)
{space[top++] = data;
}
int myStack::pop()
{return space[--top];
}
main.cpp
#include <iostream>
#include "Headers/myStack.h"using namespace std;int main(){myStack s(2);if(!s.isFull())s.push(10);if(!s.isFull())s.push(20);if(!s.isFull())s.push(30);if(!s.isFull())s.push(40);while(!s.isEmpty())cout<<s.pop()<<endl;return 0;
}相关文章:
C++ 封装的用法
C(七)封装 封装,可以达到,对外提供接口,屏蔽数据,对内开放数据。 权限控制 struct 中所有行为和属性都是 public 的(默认),此举也是为了 C兼容 C 语言, 因为 C 语言中没有权限的概念。 C中的 class 可以…...
【C++11:异常】
目录 抛异常标准书写格式 抛异常如何执行? 指定抛出异常类型: noexcept 关键字:throw 抛异常标准书写格式 抛异常如何执行? 当212行的异常被抛出,程序会重新返回函数func中,在函数中去寻找catch 语句的…...
Dify中HTTP请求节点的常见操作
HTTP节点包括API请求类型(GET、POST、HEAD、PATCH、PUT、DELETE),鉴权类型(无、API-Key基础、API-Key Bearer、API-Key自定义),HEADERS键值设置,PARAMS键值设置,BODY(non…...
《大语言模型(赵鑫)》知识框图
...
【Android】性能实践—编码优化与布局优化学习笔记
编码优化 使用场景 如果需要拼接字符串,优先使用StringBuffer和StringBuilder进行凭借,他们的性能优于直接用加号进行拼接,因为使用加号连接符会创建多余的对象一般情况下使用基本数据类来代替封装数据类型(比如int优于Integer&…...
如何合规与安全地利用专业爬虫工具,构建企业数据竞争优势
摘要: 本文深入探讨了在当今大数据时代,企业如何通过合规且安全的方式运用专业爬虫工具,有效收集并分析海量信息,进而转化为企业独有的数据优势。我们不仅会介绍最佳实践,还会讨论关键技术和策略,帮助企业…...
自动驾驶三维车道线检测系列—OpenLane数据集介绍
文章目录 1. 背景介绍2. OpenLane数据集详细描述2.1 数据集特点2.2 坐标系定义 3. 使用方法4. 结论 1. 背景介绍 自动驾驶技术的发展日新月异,而3D车道感知是其核心之一。本文将深入介绍OpenLane数据集——迄今为止规模最大、最接近真实世界的3D车道数据集。我们将…...
CMakeList学习笔记
设置项目:project project(planning VERSION 1.0.0 LANGUAGES CXX) # 项目的名字 版本 1.1.0 编程语言 CXX 设置包含目录:include_directories、targer_include_directories 设置编译类型:add_executable、add_library add_executable(demo d…...
将git默认的编辑器设置为vin
git默认编辑器现状 如下,很多linux发行版,未加修改的情况下,git的默认编辑器使用起来不太方便 Signed-off-by: root <rootxxx.COM># Please enter the commit message for your changes. Lines starting # with # will be ignored, a…...
ros2_control 6 自由度机械臂
系列文章目录 前言 ros2_control 是一个实时控制框架,专为普通机器人应用而设计。标准的 c 接口用于与硬件交互和查询用户定义的控制器命令。这些接口增强了代码的模块化和与机器人无关的设计。具体的应用细节,例如使用什么控制器、机器人有多少个关节以…...
Python 在自动化中的实际应用:用 Python 简化繁琐任务
文章目录 1、概述2、自动化文件和目录管理3.数据处理与分析4.网页爬虫5. 系统管理6。定时任务7.结语 1、概述 这篇文章将深入探讨Python在自动化中的实际应用,帮助您用Python简化繁琐任务。 我们将从多个方面入手,展示如何利用Python进行文件管理、数据…...
解释 Spring 框架的核心模块(如 IoC 容器、AOP )及其工作原理。描述如何使用 Spring Boot 快速搭建一个 RESTful Web服务?
Spring框架是一个广泛使用的Java企业级应用程序开发框架,它提供了一系列的模块来帮助开发者构建健壮、可测试、可维护的应用程序。 其中,最核心的模块包括IoC容器和AOP(Aspect Oriented Programming,面向切面编程)。 …...
数据分析详解
一、数据分析教程 1. 入门教程 在线课程:如Coursera、Udemy、网易云课堂等平台提供了大量数据分析的入门课程,涵盖统计学基础、Python/R语言编程、数据可视化等内容。书籍推荐:《Python数据分析实战》、《R语言实战》等书籍是数据分析入门的…...
SpringCloud之@FeignClient()注解的使用方式
FeignClient介绍 FeignClient 是 Spring Cloud 中用于声明一个 Feign 客户端的注解。由于SpringCloud采用分布式微服务架构,难免在各个子模块下存在模块方法互相调用的情况。比如订单服务要调用库存服务的方法,FeignClient()注解就是为了解决这个问题的…...
20.rabbitmq插件实现延迟队列
问题 前面谈到基于死信的延迟队列,存在的问题:如果第一个消息延时时间很长,而第二个消息延时时间很短,第二个消息并不会优先得到执行。 下载插件 地址:https://github.com/rabbitmq/rabbitmq-delayed-message-excha…...
TS如何处理js模块的类型?
现在很多插件都直接用ts开发了,本身包含了类型定义常见的第三方插件,都有’types/xxx’包,安装即可使用其他的,可通过declare module定义类型 比如: // someModule.js export function greet(name) {return Hello, $…...
GPS定位系统(VUE框架)
源码下载:小宅博客网 博主之前写的《GPS定位系统(MVC框架)》版本,并没有做到前后端分离,不太适合多人协作开发,这边博主分享一个基于asp.net web api vue3的GPS定位系统框架,本框架继承了MVC框…...
分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平
产品简介 功能: AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时,可以快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全。 应用…...
神奇的方法解决Navicat闪退
原因 打开Navicat操作上面的工具等就会闪退,原因竟然是屏幕划词!!! 解决方法 看别人提到有道词典的划词功能的原因 我没有安装有道词典,但我安装豆包,它也有划词翻译的功能,关闭即可...
openmv学习笔记(24电赛笔记)
感光元件 openmv采用小孔摄像模式,将图像映射到感光原件上面,来传递图片,通过图片快速的刷新行成视频,在IDE中通过对感光原件的编辑可以控制视频的效果。 重置感光元件到默认状态 import sensor #导入感光元件这个库sensor.res…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
