C++ 语法基础课7 —— 类、结构体、指针、引用

news2024/11/15 12:39:09

文章目录

  • 1. 类和结构体
    • 1.1 类的定义
    • 1.2 类的使用
    • 1.3 结构体
    • 1.4 构造函数
  • 2. 指针和引用
    • 2.1 指针
    • 2.2 数组
    • 2.3 引用
    • 2.4 查询地址
  • 3. 链表
    • 3.1 添加结点
    • 3.2 删除结点

1. 类和结构体

1.1 类的定义

class Person
{
    private:
        int age, height;
        double money;
        string books[100];
    
    public:
        string name;
        
        void say()
        {
            cout << "I'm " << name << endl;
        }
        
        int get_age
        {
            return age;
        }

		void add_money(double x)
		{
			money += x;
		}
);
  • 类中的变量和函数被统一称为类的成员变量
  • private后面的内容是私有成员变量,在类的外部不能访问;public后面的内容是公有成员变量,在类的外部可以访问

1.2 类的使用

#include <iostream>
using namespace std;
const int N = 1000010;

class Person
{
    private:
        int age, height;
        double money;
        string books[100];
    
    public:
        string name;
        
        void say()
        {
            cout << "I'm " << name << endl;
        }
        
        int set_age(int a)
        {
            age = a;
        }
        
        int get_age()
        {
            return age;
        }
    
        void add_money(double x)
        {
            money += x;
        }
} person_a, person_b, persons[100];// 可以声明一个数组

int main()
{
	Person persons[100];
    Person c;
    
    c.name = "yxc";      // 正确!访问公有变量
    c.age = 18;          // 错误!访问私有变量
    c.set_age(18);       // 正确!set_age()是共有成员变量
    c.add_money(100);
    
    c.say();
    cout << c.get_age() << endl;
    
    return 0;
}
  • 结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public

1.3 结构体

  • 结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public
struct Person
{
    private:
        int age, height;
        double money;
        string books[100];
		
		int get_height()
		{
			return height;
		}
    
    public:
        string name;
        
        void say()
        {
            cout << "I'm " << name << endl;
        }
        
        int get_age
        {
            return age;
        }

		void add_money(double x)
		{
			money += x;
		}
)person_a, person_b, persons[100];

1.4 构造函数

#include <iostream>
using namespace std;

struct Person
{
	int age, height;
    double money;
	// 无参构造函数
	Person() {}

	Person (int _age. int _height) : age(_age), hight(_hight) {}
	
	// 有参构造函数
	Person(int _age, int _height, double _money)// 名称和结构体一样
	{
		age = _age;
		height = _height;
		money = _money;
	}

	// 另外一种赋值的方式
	Person(int _age, int _height, double _money) : age(_age), hight(_hight), money(_money){}
};// 一定加封号

int main()
{
	Person p;// 无参构造函数
	Person p(18, 180, 100.0);// 调用构造函数
	Person p = {18, 180, 100.0};
	return 0}

2. 指针和引用

2.1 指针

  • 指针指向存放变量的值的地址,因此我们可以通过指针来修改变量的值
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int* p = &a;
	*p += 5;
	cout << *p << endl;
	return 0;
}
  • 通过指针修改变量的值
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int* p = &a;
	int** q = &p;// 求p本身的地址
	cout << q << endl;// 打印指针p的地址
	cout << *p << endl;// 10
	*p = 12;
	cout << *p << endl;// 12
	cout << a << endl;// 12,读取并修改变量的值
	return 0;
}

2.2 数组

  • 数组名是一种特殊的指针。指针可以做运算
#include<iostream>
using namespace std;

int main()
{
	int a[5] = {1,2,3,4,5};
	for(int i = 0; i < 5; i++) cout << *(a + i) << endl;
	return 0;
}
#include<iostream>
using namespace std;

int main()
{
	char c;
	int a[5] = {1,2,3,4,5};
	
	int* p = &a[0], *q = &a[1];
	cout << q - p << endl;
	return 0;
}
  • 查询数组的地址
#include<iostream>
using namespace std;

char a, b;

int main()
{
	char c;
	int a[5] = {1,2,3,4,5};

	cout << (void*)&c << endl;
	cout << a << endl;
	for(int i = 0;i < 5;i++)
		cout << (void*)&a[i] << endl;
	return 0;
}

在这里插入图片描述

  • 数组地址间隔4个字节,int型是4个字节
    在这里插入图片描述

2.3 引用

  • 引用和指针类似,相当于给变量起了个别名
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int &p = a;
	p += 5;
	cout << p << endl;
	return 0;
}
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int* p = a;// 指针
	int& p = a;// 引用,别名
	p += 5;
	cout << p << endl;
	return 0;
}

2.4 查询地址

#include<iostream>
using namespace std;

int main()
{
	char c = 'a', b;// 局部变量定义在栈空间,全局变量定义在堆空间
	cout << (void*)&c << endl;
	cout << (void*)&b << endl;// 连续定义的变量,地址相邻
	return 0;
}

在这里插入图片描述

3. 链表

在这里插入图片描述

#include<iostream>
using namespace std;

struct Node
{
	int val;
	Node* next;

	Node(int _val) : val(_val), next(NULL) {} // 默认构造函数,NULL说明是空指针
}*head;

int main()
{
	// 分别给链表结点赋值1,2,3
	Node* p = new Node(1);// new Node(1)表示定义一个Node类型的变量,返回的是变量的地址。加new返回的是地址,不加new返回的是值。生成一个结构体,结构体指针放在p里面
	Node* q = new Node(2);
	auto o = new Node(3);// auto 是自动判断类型是指针结点类型

	p->next = q;
	q->next = o;

	// 	添加结点4
	Node* u = new Node(4);
	u->next = head;// 将Head赋值给u->next
	head = u;// head头结点指向u

	// 删除结点1
	head->next = head->next->next;// 右边head->next是指1

	// 遍历链表中字符
	Node* head = p;// 头结点是p

	for(Node* i = head; i != 0; i = i->next)// i = 0时结束,i->next是指下一个结点
		cout << i->val << endl;// 输出的是值

	return 0;
}

在这里插入图片描述

3.1 添加结点

Node* u = new Node(4);
u->next = head;// 将Head赋值给u->next
head = u;// head头结点指向u
  • u->next = head; 将head赋值给u->next
    在这里插入图片描述
  • head = u; 将结点u赋值给head
    在这里插入图片描述
    在这里插入图片描述

3.2 删除结点

在这里插入图片描述

// 删除结点1
head->next = head->next->next;// 右边head->next是指1

在这里插入图片描述

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

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

相关文章

嵌入式系统移植导学

目录 系统移植导学 系统移植过程 Windows装机 Linux系统移植 开发板启动过程 系统移植导学 操作系统&#xff1a;向下管理硬件、向上提供接口 操作系统为我们提供了&#xff1a; 1.进程管理 2.内存管理 3.网络接口 4.文件系统 5.设备管理 那系统移植是干什么呢&am…

Zabbix使用LLD自动发现规则发现监控docker容器(下)

本篇是使用Zabbix监控docker容器下篇。利用ZABBIX自动发现监控功能&#xff0c;在部署zabbix agent客户端的服务器上&#xff0c;编写自定义功能脚本&#xff0c;实现自动获取服务器上运行的docker服务并监控其运行状态。 前提条件 已经部署好的zabbix监控系统 Zabbix服务器…

自动驾驶专题介绍 ———— 惯性导航

文章目录介绍工作原理特点应用场景介绍 惯性导航系统&#xff08;Inertial Navigation System - INS&#xff09;是一种不依赖外部输入信息、也不向外辐射能量的自助式导航系统&#xff0c;是通过陀螺仪和加速度计为敏感器件的导航参数解算系统。该系统根据陀螺仪输出建立导航坐…

安全—03day

虚拟主机基于域名、端口、IP访问nginx 一、虚拟主机基于域名访问nginx 1.为虚拟主机提供域名解析 echo "192.168.181.130 www.nj.com www.benet.com" >> /etc/hosts2.为虚拟主机准备网页文档 mkdir -p /var/www/html/benet mkdir -p /var/www/html/nj echo…

linux系统中QT进行文本读写操作的方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;利用QT进行文本的读写操作方法。 目录 第一&#xff1a;文本读写基本简介 第二&#xff1a;应用实例 第三&#xff1a;运行效果 第一&#xff1a;文本读写基本简介 有时候我们需要对文件进行读写&#xff0c;比如写个Mp3…

第01讲:Docker入门

一、什么是Docker 1、Docker 是一个开源的应用容器引擎 2、诞生于 2013 年初&#xff0c;基于 Go 语言实现&#xff0c; dotCloud 公司出品&#xff08;后改名为Docker Inc&#xff09; 3、Docker 是一个可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器引擎&…

Java--集合--经典七道综合练习题

文章目录 一、集合的遍历方式 二、添加数字并遍历 三、添加学生对象并遍历 四、添加学生对象并遍历 五、添加用户对象并判断是否存在 六、添加手机对象并返回要求的数据 七、创建学生管理系统&#xff08;*****&#xff09; 一、集合的遍历方式 需求&#xff1a;定义一…

深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

2022 年&#xff0c;5G 商用发展成效显著&#xff0c;正在加速产业数字化&#xff0c;全面赋能经济社会发展。运营商 5G 投资超过 4000 亿元&#xff0c;共带动 8.6 万亿元的经济产出&#xff0c;而这一切离不开奋战在 ICT 行业的 5G 应用推动者。 日前&#xff0c;由中国工信…

分享104个PHP源码,总有一款适合您

PHP源码 分享104个PHP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1MnmNb3vsofBnQ4kKoMlSBw?pwdkl4o 提取码&#xff1a;kl4o 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

Python学生信息管理系统源码,学生教师端分离,支持数据的增删查改、数据分析与统计 基于Tkinter带图形界面

介绍 Python学生信息管理系统。学生教师端分离&#xff0c;支持数据的增删查改、数据分析与统计。 下载地址&#xff1a;Python学生信息管理系统源码 软件架构 Python3.9版本 Python-Tkinter库开发的图形界面 Python-Pandas库数据处理 Python-matplotlib库数据分析与展示 P…

C语言经典100例(006,007)

题目&#xff1a;用*号输出字母C的图案。 程序分析&#xff1a;可先用*号在纸上写出字母C&#xff0c;再分行输出。 程序源代码&#xff1a; #include "stdio.h" int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n");printf("…

CSS知识点精学7-小兔鲜项目实现案例

一.网页和网站的关系 包含关系 网页和网站的关系就是包含关系&#xff0c;网站包含了很多的网页&#xff0c;网页不能单独存在于网络中。 网站是一个整体&#xff0c;网页是一个个体&#xff0c;一个网站是由很多网页构建而成。就像进入百度网站&#xff0c;里面还有其他许多…

AI作画怎么弄?超详细ai绘画教程在这里

AI作画怎么弄&#xff1f;如何实现将照片生成ai漫画图&#xff0c;如何通过关键词描述生成好看的壁纸、背景&#xff1f;最全最详细教程来了&#xff0c;一分钟学会&#xff01; 一、将照片生成二次元 我们先打开数画ai绘画软件&#xff0c;在首页这里&#xff0c;点击“相册”…

【Git】Git常用命令

3、Git 常用命令 命令名称作用git config --global user.name 用户名设置用户签名git config --global user.email 邮箱设置用户签名git init初始化本地库git status查看本地库状态git add 文件名添加到暂存区git commit -m “日志信息” 文件名提交到本地库git reflog查看历史…

手写RPC框架06-基于线程和队列提升框架并发处理能力

源代码地址&#xff1a;https://github.com/lhj502819/IRpc/tree/v7 系列文章&#xff1a; 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力 Server端 现有的问题 目前我们的RPC框…

酷早报:1月9日全球Web3加密行业重大资讯大汇总

2023年1月9日 星期一 【数据指标】 加密货币总市值&#xff1a;$0.84万亿 BTC市值占比&#xff1a;39.14% 恐慌贪婪指数&#xff1a;25 极度恐慌【今日快讯】 1、【政讯】 1.1、美债关键收益率曲线倒挂幅度创纪录以来新高 1.2.1、美联储博斯蒂克&#xff1a;倾向于将利率升至5%…

2020年MathorCup高校数学建模挑战赛—大数据竞赛A题移动通信基站流量预测求解全过程文档及程序

2020年MathorCup高校数学建模挑战赛—大数据竞赛 A题 移动通信基站流量预测 原题再现&#xff1a; 随着移动通信技术的发展&#xff0c;4G、5G 给人们带来了极大便利。移动互联网的飞速发展&#xff0c;使得移动流量呈现爆炸式增长&#xff0c;从而基站的流量负荷问题变得越来…

代码随想录第55天|● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp[i][j]。 if (s[i - 1] t[j - 1])&#xff0c;那么dp[i][j] dp[i - 1][j - 1] 1;&#xff0c;因为找到了一个相同的字符&#xff0c;相同子…

当没有成熟案例可参考时,企业该如何实现数字化转型?

对于企业来说&#xff0c;数字化转型过程中&#xff0c;参考成熟的案例是可以提高成功率的。但是在现实中&#xff0c;很多企业由于行业、领先地位、技术保密性等原因&#xff0c;导致没有或者找不到可参考的数字化转型案例为自身提供经验。那么这种情况下该如何做呢&#xff0…

Java中日期和时间的类

文章目录JDK8之前日期和时间的APISystem类中的Date类中的java.util.Date类中的二个构造器二个方法java.sql.Date类中的实例化将java.sql.Date类对象转化为java.util.Date类的对象将java.util.Date类对象转化为java.sql.Date类的对象每日一考JDK8之前日期和时间的API System类中…