c++类和对象

news2024/9/25 19:15:55

在这里插入图片描述

二、c++类和对象

1.什么是类

c++当中类是一个数据类型,封装了数据以及操作。个人理解:c++类就是对事物的的抽象,c++万物即可为类,和c语言的结构体一样,是一系列事物的共同属性和行为

2.什么是对象

  • 对象就是类的具体化(实例化)。举个例子:女朋友类

  • 抽象的过程:类 属性:年龄,身份证号,姓名,三围,身高,体重…

行为:购物,看电影…

  • 具体的过程:对象 属性的具体化

3.两个重要概念

  1. 属性:用的数据描述属性:int float double char string…自定类型 ———–>c++类中数据成员
  2. 行为:用函数描述行为 ———>c++类中叫做成员函数

4.类和对象初识

1.类的创建

class 类名
{
 	public:
    protected:
    private:
};

2.类的权限问题

权限限定词:

  • public:公有属性
    • 函数是public属性,通常叫做公有接口
  • protected:保护属性
  • private:私有属性

权限限定是用来限定类外对象对于类中数据的访问权限,类外只能访问public属性,c++类中默认属性是private属性,注:c++类中毫无权限可言,可以互相访问结构体默认属性是public,权限限定词在结构体中也适用

3.对象访问数据

c++类中的一般数据和行为只能通过对象来访问。对象主要有的有以下几种形式:

  • 普通对象
  • 对象数组:c++一般很少用到对象数组
  • 对象指针
  • 普通指针指向对象
  • 指针做动态内存申请
  • 综上访问的数据有以下两种访问:
  • 对象.成员
  • 对象指针->成员

5.c++类中数据访问

  • c++允许在类中直接给数据做初始化
  • c++提供公有接口传参的方式做数据的访问
  • c++提供公有接口返回数据的引用做数据的访问

注意:c++中有类了,结构体没用了?当然不是,为了访问数据方便,不需要考虑权限问题,可以选择使用结构体

6.有头链表

#include<iostream>
using namespace std;
class Node
{
public:
	void initNode(int data)
	{
		m_data = data;
		next = nullptr;
	}
	void printNode()
	{
		cout << m_data << " ";
	}
	Node*& getNext() { return next; }
protected:
	int m_data;
	Node* next;
};
class List 
{
public:
	void createHead()     //创建表头
	{
		headNode = new Node;     //new一个表头节点
		headNode->getNext() = nullptr;  //把表头节点next指针置为空
	}
	void insertNode(int data)    //插入节点
	{
		Node* newNode = new Node;    //new一个新节点
		newNode->initNode(data);     //初始化新节点数据
		newNode->getNext() = headNode->getNext();  
		headNode->getNext() = newNode;
	}
	void printList()
	{
		Node* pmove = headNode->getNext();  //从第二个节点开始
		while( pmove != NULL )       
		{
			pmove->printNode();     //调用打印节点函数
			pmove = pmove->getNext();      //指针往下走
		}
		cout << endl;
	}
protected:
	Node* headNode;
};

int main()
{
	List list;
	list.createHead();
	for (int i = 0; i < 10; i++)
	{
		list.insertNode(i + 2);
	}
	list.printList();
	return 0;
}

7.无头链表

#include<iostream>
#include<new>
using namespace std;
struct Node 
{
	int data;
	Node* next;
	void print()
	{
		cout << data << " ";
	}
	void initNode(int Data)
	{
		data = Data;
		next = nullptr;
	}
};
class List 
{
public:
	void push_front(int data);         //头插法
	void push_back(int data);          //尾插法
	void pop_front();                  //头部删除
	void pop_back();                   //尾部删除

	//万金油函数
	int size() { return m_size; }
	bool empty() { return m_size == 0; }

	//访问头结点和尾结点数据
	int front() { return frontNode->data; }
	int tail() { return tailNode->data; }
	void print();
protected:
	//万精油属性
	int m_size = 0;     //记录当前链表中的节点个数
	Node* frontNode = nullptr;    //起标识作用,第一个节点
	Node* tailNode = nullptr;     //最后一个节点
};

void List::push_front(int data)
{
	Node* newNode = new Node;
	newNode->initNode(data);
	if ( m_size==0 )       //只有一个节点的时候,头就是尾,尾就是头
	{
		tailNode = newNode;
	}
	else
	{
		newNode->next = frontNode;
	}
	frontNode = newNode;
	m_size++;
}

void List::push_back(int data)
{
	Node* newNode = new Node;
	newNode->initNode(data);
	if(m_size==0)
	{
		frontNode = newNode;
	}
	else
	{
		tailNode->next = newNode;
	}
	tailNode = newNode;
	m_size++;
}

void List::pop_front()
{
	if ( empty())
		return;
	Node* nextNode = frontNode->next;
	delete frontNode;
	if (nextNode == nullptr)
	{
		tailNode = nullptr;
	}
	frontNode = nextNode;
	m_size--;
}

void List::pop_back(){
	if (empty())
	{
		return;
	}
	else if ( frontNode == tailNode )
	{
		pop_front();
	}
	else
	{
		Node* curNode = frontNode;
		while (curNode->next != tailNode)
		{
			curNode = curNode->next;
		}
		delete tailNode;
		curNode->next = nullptr;
		tailNode = curNode;
		m_size--;
	}
}

void List::print()
{
	Node* curNode = frontNode;
	while (curNode != NULL) 
	{
		curNode->print();
		curNode = curNode->next;
	}
	cout << endl;
}

int main() 
{
	List list;
	for (int i = 0; i < 10; i++)
	{
		list.push_front(i);
	}
	list.print();
	list.push_back(99);
	list.print();
	list.pop_front();
	list.print();
	list.pop_back();
	list.print();
    //边打印边删
	while (!list.empty())
	{
		cout << list.front() << " ";
		list.pop_front();
	}
	//了解,这些函数都有现成的
	std::list<int> mylist;
	mylist.push_back(45);
	mylist.pop_back();
	return 0;
}

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

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

相关文章

git创建远程分支并关联本地分支

场景一&#xff1a; 本地、远程都没有分支 "v1.0.0" 1. 先查看确认一下&#xff0c;命令&#xff1a; git branch -a 2. 创建本地分支&#xff0c;命令&#xff1a; git checkout -b v1.0.0 3. 创建远程分支&#xff0c;并且本地分支关联远程分支&#xff0c;命令…

上海亚商投顾:沪指缩量跌0.44% 医药股全线反弹

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪大小指数今日走势分化&#xff0c;沪指全天弱势震荡&#xff0c;创业板指盘中涨超1%&#xff0c;午后涨幅有所回落。…

2022-12-29 驱动-IO多路复用

IO多路复用的原理&#xff1a; 1>select和poll原理&#xff1a;将文件描述符添加到集合中&#xff0c;监测是否有准备就绪的文件描述符&#xff0c;将未准备就绪的文件描述符剔除集合&#xff0c;准备就绪的文件描述符实现相关操作 2>对于epoll函数原理&#xff1a;创建…

超融合一体流式引擎,打造分布式数据库新纪元

12月28日&#xff0c;“数智驱动 全栈赋能”亚信科技2022年度系列产品发布会“数据库专场”线上成功举办&#xff0c;亚信科技重磅发布“超融合一体流式引擎”的AntDB V7.2数据库&#xff0c;并分享了在通信、交通等行业的应用实践。 百行千业数智化转型风起云涌&#xff0c;企…

布局云计算的下一个主场,紫光云引领行业云三大趋势

早在2018年&#xff0c;中国信通院发布2018云计算白皮书并指出&#xff1a;行业云时代全面开启。4年后的2022年底&#xff0c;Gartner将行业云平台列入2023年十大战略技术趋势&#xff0c;Gartner预测到2027年将有超过50%的企业使用行业云平台加速其业务项目。可以说&#xff0…

数据结构----树

树的概念 1.树的定义&#xff1a;树是n(n>0)个结点的有限集合 当n0时&#xff0c;称为”空树“ 当n>0时&#xff0c;有且仅有一个称为”根“的特定结点&#xff0c;该结点没有前驱&#xff0c;但是却有一个或者多个后继结点。 除了根节点以外的n-1个结点可划分为多个有…

项目管理范围(下)

创建WBS 什么是WBS&#xff1f; WBS(Work Breakdown Structure) --- 工作分解结构 创建WBS是将项目的可交付成果和项目工作分解成较小的&#xff0c;更易于管理的组件的过程。 它包含哪些内容&#xff1f; 举例&#xff1a; 里程碑的例子&#xff1a;比如需求评审&#xff…

计算机SCI论文润色,更容易被录用吗? - 易智编译EaseEditing

SCI论文润色后投稿&#xff0c;相较于没有润色投稿&#xff0c;确实概率要大一些。 特别有些英语水平较差的作者&#xff0c;投稿的论文&#xff0c;没有润色之前&#xff0c;可能审稿人会不理解&#xff0c;或读不通。 润色后&#xff0c;可能帮助审稿人理解论文。 目前不少…

告别动态规划

一、动态规划的三大步骤 动态规划&#xff0c;无非就是利用历史记录&#xff0c;来避免我们的重复计算。而这些历史记录&#xff0c;我们得需要一些变量来保存&#xff0c;一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤 第一步骤&#…

九、树结构基础

1、为什么需要树这种数据结构&#xff1f; 数组存储方式的分析 优点&#xff1a;通过下标方式访问元素&#xff0c;速度快。对于有序数组&#xff0c;还可使用二分查找提高检索速度。 缺点&#xff1a;如果要检索具体某个值&#xff0c;或者插入值(按一定顺序)会整体移动&…

简单BGP实验

&#xff08;我这里AS1 BGP为100 AS2BGP为200 AS3 BGP为300&#xff09; 这里已经配置好ip环回&#xff08;这里tcp使用的是rip也已经提前配置好&#xff09; 首先先配置AS2中的ibgp [r2]bgp 200 [r2-bgp]router-id 2.2.2.2 [r2-bgp]peer 4.4.4.4 as-number 100 [r2-bgp]…

白话初识UDP协议

UDP是什么 UDP是一个传输层的数据包装协议&#xff0c;特点有&#xff1a; 无连接&#xff08;不需要两端连通就可以发送消息给接收端&#xff09;不可靠传输&#xff08;无法知道数据是否送达&#xff09;面向数据报&#xff08;以数据报为数据传输单位&#xff09;全双工&…

vue项目cli2 升级 cli3

vue-cli2 升级 vue-cli3 由于vue-cli2 版本太低&#xff0c;升级到vue-cli3 采用的方法是新建cli3项目&#xff0c;对比差异&#xff0c;在cli2项目单独升级 检查环境 node环境检查版本是否在8.11版本以上 npm uninstall vue-cli -g 卸载旧版本的vue-cli npm install -g vue/…

广州蓝景分享—VSCode 前端开发必备插件推荐

Hello~~各位小伙伴好&#xff0c;今天广州蓝景整理一波前端开发必备插件&#xff0c;绝对可以提高你的生产力&#xff0c;希望这篇文章对大家有所帮助。 开发综合推荐 别名路径跳转 插件名&#xff1a;别名路径跳转 使用说明: 别名路径跳转插件&#xff0c;支持任何项目&…

BrightlyPro - 照片视屏后期自动调色增亮工具

BrightlyPro - 照片视屏后期自动调色增亮工具 BrightlyPro 自动增强您的照片和视频&#xff0c;你最需要它。通过一个滑块&#xff0c;BrightlyPro 立即使您的照片自适应地亮起来&#xff0c;同时保持光影之间令人愉悦的平衡&#xff0c;而不会扭曲已经点亮的区域。 下载 ➤ …

day07 面向对象

1. 类和对象 **面向对象和面向过程的思想对比 : ** ​ **面向过程 &#xff1a;**是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的 ​ **面向对象 &#xff1a;**是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的功能…

Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

一、本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服&#xff0c;中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多&#xff0c;Maven最终要把资源上传到哪个仓库? Maven下载的时候&#xff0c;又需要携带用…

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制

Hi I’m Shendi 为了防止网站被恶意攻击&#xff0c;总是需要做一些防护措施 最外层的web服务器是Nginx&#xff0c;于是寻找 nginx 的一些关于防护措施的配置&#xff0c;记录在此 https://sdpro.top/blog/html/article/1005.html 一些变量 首先列举出会使用到的一些变量 …

XXEXML漏洞详解

XXE&XML漏洞详解1.XML基础1.1.XML基础介绍1.2.XML文档结构1.3.DTD介绍1.4.实体类介绍1.5.外部实体2.XXE漏洞基本介绍2.1.XXE漏洞基本概念2.2.XXE漏洞危害2.3.XXE漏洞输出形式2.4.XXE漏洞相关差异3.XXE漏洞测试3.1.有回显测试3.1.1.有回显案例3.1.1.1.测试回显位置3.1.1.2.构…

【XR】Oculus揭秘Touch控制器追踪技术:LED 匹配

Oculus揭秘Touch控制器追踪技术&#xff1a;LED 匹配 稳健的状态机&#xff0c;它允许我们能够在各种求解器之间进行转换 &#xff08;映维网 2019年11月05日&#xff09;映维网曾在九月分享了一篇关于Oculus Constellation追踪系统&#xff0c;其中负责AR/VR设备输入追踪的F…