【C++第二课 - 类和对象上 - 入门知识】struct类、class类、访问限定符、this指针

news2025/1/16 15:07:44

目录

  • 面向过程与面向对象初步认识
  • 类的定义
    • struct定义类
    • class定义类
  • 类的访问限定符及封装
    • 访问限定符
  • 声明与定义分离
  • this指针
    • 类成员的命名问题
    • this
  • 类的实例化
  • 类的对象大小的计算
    • 成员函数为何不在对象里面
    • 类对象大小计算

面向过程与面向对象初步认识

C语言面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
在这里插入图片描述
C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。
在这里插入图片描述

类的定义

struct定义类

C++在C语言的基础上将struct升级成了类
1、struct使用上的升级,不用typedef就可以直接用类名,类名就是类型

struct Stack
{
	int* a;
	int top;
	int capacity;
};

int main()
{
	Stack s1;

	return 0;
}

在这里插入图片描述
2、类里面可以定义函数

struct Stack
{
	int* a;
	int top;
	int capacity;

	void Init()
	{
		a = nullptr;
		top = 0;
		capacity = 0;
	}

	void Push(int x)
	{
		//...
	}
};

int main()
{
	Stack s1;
	s1.Init();
	s1.Push(1);
	s1.Push(2);

	return 0;
}

class定义类

C++更喜欢用class定义类
用class之后会有不同,而这个不同就得因为访问限定符

class className
{
	// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号

类的访问限定符及封装

访问限定符

在这里插入图片描述
【访问限定符说明】
(1) public修饰的成员在类外可以直接被访问
(2) protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
(3) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
(4) 如果后面没有访问限定符,作用域就到 } 即类结束。
(5) class的默认访问权限为private,struct为public(因为struct要兼容C)
私有与保护在继承那块有区别,这里可以先认为没有区别
在这里插入图片描述

声明与定义分离

C语言是函数放函数的声明,结构体直接在.h里面
C++类,类的成员放.h里面,类的函数只放声明
变量的声明与定义的区分,要看有没有开空间

Stack.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class Stack
{
	int* a;
	int top;
	int capacity;

public:
	void Init();
	void Push(int x);
};
test.cpp
#include "Stack.h"

void Stack::Init()
{
	a = 0;
	top = 0;
	capacity = 0;
}

void Stack::Push(int x)
{
	//...
}

int main()
{
	Stack s1;
	s1.Init();
	s1.Push(1);
	s1.Push(2);

	return 0;
}

::这是域作用限定符
在这里插入图片描述
默认是内联,但也不一定会展开,最终展不展开还是看这个函数长不长、编译器的最终决定。
在这里插入图片描述

类规范定义:
长的函数声明与定义分离
短小的函数可以直接在类里面定义

this指针

类成员的命名问题

下列这个问题并不会报错,但d不会被初始化,解决方法:
(1)改变参数的名称(不常用)
(2)改变成员变量的名称(eg:_year,这根据每个公司可能会不一样)

在这里插入图片描述
在这里插入图片描述

this

编译器会处理成下列的样子,不能显示的写

class Date
{
	int _year;
	int _month;
	int _day;

public:
	void Init(Date* this, int year, int month, int day)
	{
		this -> _year = year;
		this -> _month = month;
		this -> _day = day;
	}
};

int main()
{
	Date d;
	Date d2;
	d.Init(&d, 2024, 1, 21);
	d2.Init(&d2, 2022, 10, 7);
	
	return 0}

类的实例化

用类类型创建对象的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没
    有分配实际的内存空间来存储它;比如:入学时填写的学生信息表,表格就可以看成是一个
    类,来描述具体学生信息。
    2.一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
  2. 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设
    计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象
    才能实际存储数据,占用物理空间
    在这里插入图片描述

类的对象大小的计算

类的大小只算成员变量的大小,成员函数不在对象里面。
在这里插入图片描述
在这里插入图片描述

成员函数为何不在对象里面

不同对象的成员函数是一样的
不同对象的成员变量是不一样的

因为成员函数用的都是一样的,如果每个对象都有成员函数,那么就白白浪费空间了。
在这里插入图片描述

类对象大小计算

要考虑内存对齐
内存对齐规定:
对于一个变量:要取其自己的对齐数与默认对齐数小的那个
这个类的大小是8
在这里插入图片描述

class Test2
{};

int main()
{
	Test2 B;
	return 0;
}

B的大小是 : 1,因为要占位。无成员变量的类(可以有成员函数),对象大小开一个字节,这个字节不存储有效数据,标识定义的对象存在过。
【C++第一课 - C++入门】相关软件(vs、gitee)、命名空间、输入输出流、缺省参数、函数重载、引用、内联函数、auto、范围for(语法糖)、nullptr

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

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

相关文章

基于Elasticsearch+Logstash+Kibana+Filebeat的日志收集分析及可视化

sudo rm /var/lib/dpkg/lock* sudo dpkg --configure -a apt update tail -f /var/log/car.log 1.1、项目概述 海量的业务应用&#xff0c;也带来了海量的日志数据&#xff0c;给业务应用的运维带来了新的挑战。例如&#xff0c;我们常用的网约车应用&#xff0c;单个平台…

六、数组(1)二维数组

一、二维数组定义方式 1、数据类型 数组名[行数][列数]; 2、数据类型 数组名[行数][列数]{{数据1,数据2},{数据3,数据4}}; 3、数据类型 数组名[行数][列数]{数据1,数据2,数据3,数据4}; 4、数据类型 数组名[][列数]{数据1,数据2,数据3,数据4}; 注&#xff1a;第二种定义方式更…

S32K3系列 --- 硬件I2C Mcal配置

前言 网上看到很多I2C的教程,基本都是模拟I2C,现在S32K3的芯片支持硬件I2C,我想着就配一个硬件的出来吧,这边记录一下,供大家学习。 一、I2C原理 这里主要教大家如何去配置,去使用。 原理的话可以参考这篇文章: 一文搞懂I2C通信总线_i2c通信的详细讲解-CSDN博客 I2…

生信人 RNA-seq

RNA-seq&#xff1a;6-qc-2 #先跑一个综合的 Multiqc 报告 #将fastqc生成的多个报告整合成一个报告&#xff0c;方便查看所有测序数据的质量。 conda install multiqc -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda cd /home/yinwen/RNA-seq_report/ mult…

【算法与数据结构】474、LeetCode一和零

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题要找strs数组的最大子集&#xff0c;这个子集最多含有 m m m个0和 n n n个1。本题也可以抽象成一个…

【LeetCode每日一题】2809. 使数组和小于等于 x 的最少时间

2024-1-19 文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路&#xff1a; 2809. 使数组和小于等于 x 的最少时间 思路&#xff1a; 获取两个列表的长度n&#xff0c;并初始化一个二维数组f&…

Spring Boot整合Redis的高效数据缓存实践

引言 在现代Web应用开发中&#xff0c;数据缓存是提高系统性能和响应速度的关键。Redis作为一种高性能的缓存和数据存储解决方案&#xff0c;被广泛应用于各种场景。本文将研究如何使用Spring Boot整合Redis&#xff0c;通过这个强大的缓存工具提高应用的性能和可伸缩性。 整合…

从零开始c++精讲:第四篇——模板初阶

文章目录 一、泛型编程二、函数模板2.1函数模板概念2.2函数模板格式2.3函数模板原理2.4函数模板实例化2.5函数模板匹配原则 三、类模板3.1类模板的定义格式3.2类模板的实例化 一、泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& righ…

TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍

一、什么是服务器 能够为其他计算机提供服务的更高级的电脑 尺寸:Unit 1u1.75英寸44.45mm4.445cm IDC&#xff08;机房&#xff09; C/S结构 Client/Server客户端和服务端 二、TCP/IP协议 计算机与计算机之间通信的协议 三要素&#xff1a; IP地址 子网掩码 IP路由 I…

C++设计模式之 模板方法模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是模板方法模式&#xff08;第18种设计模式&#xff09; 模板方法模式&#xff0…

大数据安全 | 期末复习(上)| 补档

文章目录 &#x1f4da;概述⭐️&#x1f407;大数据的定义、来源、特点&#x1f407;大数据安全的含义&#x1f407;大数据安全威胁&#x1f407;保障大数据安全&#x1f407;采集、存储、挖掘环节的安全技术&#x1f407;大数据用于安全&#x1f407;隐私的定义、属性、分类、…

Transformer 可解释性论文整理(超级详细)

Transformer 可解释性论文整理 前段时间想进一步的了解transformer的工作原理&#xff0c;于是找到了几篇可解释性的文章进行阅读&#xff0c;发现了许多比较有趣的现象和结论&#xff0c;对每篇文章都有自己的深度思考和理解&#xff0c;在此记录&#xff0c;欢迎交流。 1. …

「优选算法刷题」:二分查找

一、题目 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 …

【JavaEE进阶】实现验证码

文章目录 &#x1f332;实现说明&#x1f343;Kaptcha插件介绍&#x1f6a9;插件原理&#x1f6a9;引入依赖&#x1f6a9;⽣成验证码&#x1f6a9;Kaptcha详细配置 &#x1f340;准备⼯作&#x1f334;约定前后端交互接⼝&#x1f6a9;需求分析&#x1f6a9;接⼝定义&#x1f6…

力扣 第 122 场双周赛 解题报告 | 珂学家 | 脑筋急转弯 + 滑窗反悔堆

前言 整体评价 倒开差点崩盘&#xff0c;T4这个反悔堆写吐了&#xff0c;T3往众数上去猜了&#xff0c;幸好case良心。 T1. 将数组分成最小总代价的子数组 I 思路: 取 nums[1:] 的最小2个值 可以部分排序&#xff0c;这样更快捷 class Solution {public int minimumCost(in…

Github操作网络异常笔记

Github操作网络异常笔记 1. 源由2. 解决2.1 方案一2.2 方案二 3. 总结 1. 源由 开源技术在国内永远是“蛋疼”&#xff0c;这些"政治"问题对于追求技术的我们&#xff0c;形成无法回避的障碍。 $ git pull ssh: connect to host github.com port 22: Connection ti…

Qt QCustomPlot 绘制子轴

抄大神杰作&#xff1a;QCustomplot&#xff08;五&#xff09;QCPAxisRect进行子绘图-CSDN博客文章浏览阅读5.9k次&#xff0c;点赞7次&#xff0c;收藏60次。文中介绍了QCustomPlot 子绘图需要掌握的类&#xff0c;也就是Matlab中的subplot&#xff0c;最后给出了一个完整的例…

EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

这里是CIP资料的协议层级图&#xff0c;讲解协议构造。 ODVA&#xff08;www.ODVA.org&#xff09;成立于1995年&#xff0c;是一个全球性协会&#xff0c;其成员包括世界领先的自动化公司。结合其成员的支持&#xff0c;ODVA的使命是在工业自动化中推进开放、可互操作的信息和…

人工智能原理实验1(2)——传教士与野人问题

&#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1; 有n个牧师和n个野人准备渡河&#xff0c;但只有一条能容纳c个人的小船&#xff0c;为了防止野人侵犯牧师&#xff0c;要求无论在何处&#xff0c;牧师的人数不得少于野人的人数(除非牧师人数为0)&#xff0c;且假…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…