【类和对象】基础知识

目录

一、类的定义

定义方式一:定义与声明都在类中

定义方式二:定义与声明分离

二、类的实例化&&类对象存储方式

类的实例化

类对象存储模式

三、this指针


一、类的定义

定义方式一:定义与声明都在类中

#include<iostream>
using namespace std;
class Date
{
public: //成员函数void Init(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
private://成员变量int _year;int _month;int _day;
};

定义方式二:定义与声明分离

Date.h

#include<iostream>
using namespace std;
class Date
{
public: //成员函数void Init(int year = 1, int month = 1, int day = 1);
private://成员变量int _year;int _month;int _day;
};

Date.cpp

#include"Date.h"
void Date::Init(int year = 1, int month = 1, int day = 1)
{_year = year;_month = month;_day = day;
}

总结:

1.public表示公有成员,类外面可以访问;private表示私有成员,类外面不能访问

2.C++中结构体和类内部都可以定义函数,区别是结构体默认访问限定符为public,类默认访问限定符为private

3.访问限定符作用范围从当前开始到下一个访问限定符或者类结束的地方结束

4.类的声明和定义分离时定义函数时必须指明 类名::函数名,否则编译报错

5.为了区分成员变量与成员函数形参,成员变量的命名前面通常前加_ 或者后加_

二、类的实例化&&类对象存储方式

类的实例化

类相当于图纸,类创建出对象好比根据图纸建造出了房子,类不占据空间,对象才占空间

而类创建对象就叫做类的实例化

#include<iostream>
using namespace std;
class Date
{
public://成员函数void Init(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
private://成员变量int _year;int _month;int _day;
};
int main()
{//Date::Init(); //(×)对象还没创建出来,不能用类名去访问Date d;d.Init(); //(√)
}

类对象存储模式

结论:类创建出的对象只存储成员变量(遵守结构体内存对齐规则),不存储成员函数,成员函数位于公共代码区

验证:

#include<iostream>
using namespace std;
class Date
{
public://成员函数void Init(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
private://成员变量int _year;int _month;int _day;
};
int main()
{Date d1;cout << sizeof(d1) << endl; //12个字节
}

补充:当类中只有成员函数或者类为空时,为了标识该对象,内存给对象分配了1个字节空间

#include<iostream>
using namespace std;
class A
{void Init(){cout << "Init()" << endl;}
};class B
{};int main()
{A a;cout << sizeof(a) << endl; //1个字节B b;cout << sizeof(a) << endl; //1个字节
}

三、this指针

问题引入:Init()函数位于公共代码区,d1,d2都调用了Init()函数来初始化,那Init()函数如何区分设置d1还是d2呢?

#include<iostream>
using namespace std;
class Date
{
public://成员函数void Init(int year = 1, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
private://成员变量int _year;int _month;int _day;
};int main()
{Date d1;d1.Init(2023 ,8, 3);Date d2;d1.Init(2023, 8, 4);
}

C++给每个非静态的成员函数增加了一个隐藏的指针形参(this指针), 哪个对象去调用成员函数,this指针就会保存该对象的地址,从而完成对不同对象的实现,所以成员函数内部都是用this指针实现的

#include<iostream>
using namespace std;
class Date
{
public://成员函数void Init(int year = 1, int month = 1, int day = 1){this->_year = year;this->_month = month;this->_day = day;}
private://成员变量int _year;int _month;int _day;
};int main()
{Date d1;d1.Init(2023 ,8, 3);Date d2;d1.Init(2023, 8, 4);
}

this指针的特点:

1.本质是成员函数的第一个形参

2.被const修饰(const 类名* this), 函数内部不能改变this指针本身

3.只能在成员函数内部使用

4.不存在于对象中

5.不需要用户显式传递,编译器自动实现

以此共勉:人生万事须自为,跬步江山即寥廓

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进阶:Docker容器管理工具——Docker-Compose使用

文章目录 前言Compose大杀器编排服务 1、docker-compose安装curl方式安装增加可执行权限查看版本 2、Docker-compose.yaml命令3、 docker-compose实战4、Docker网络路由docker的跨主机网络路由**问题由来**:方案两台机分别配置路由表ip_forward配置 总结 前言 容器的管理工具&…

AI一键生成短视频

AI一键生成推文短视频 阅读时长&#xff1a;10分钟 本文内容&#xff1a; 结合开源AI&#xff0c;一键生成短视频发布到常见的某音&#xff0c;某手平台&#xff0c;狠狠赚一笔 前置知识&#xff1a; 1.基本的 python 编程知识 2.chatGPT 使用过 3.stable diffution 使用过 成果…

开关电源控制--bode图相角裕量的选择

什么是相角裕量 在Bode图中&#xff0c;相角裕量是指系统的相位裕量&#xff0c;用于评估系统的稳定性和频率响应特性。 Bode图是一种常用的频率响应图&#xff0c;将系统的增益和相位随频率变化的情况绘制出来。在Bode图中&#xff0c;相角裕量表示系统的相位与-180度&#…

Python web实战之Django的文件上传和处理详解

概要 关键词&#xff1a;Python Web开发、Django、文件上传、文件处理 今天分享一下Django的文件上传和处理。 1. 上传文件的基本原理 在开始深入讲解Django的文件上传和处理之前&#xff0c;先了解一下文件上传的基本原理。当用户选择要上传的文件后&#xff0c;该文件会被发…

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…

20天突破英语四级高频词汇——第②天

2&#xfeff;0天突破英语四级高频词汇~第2天加油(ง •_•)ง&#x1f4aa; &#x1f433;博主&#xff1a;命运之光 &#x1f308;专栏&#xff1a;英语四级高频词汇速记 &#x1f30c;博主的其他文章&#xff1a;点击进入博主的主页 目录 2&#xfeff;0天突破英语四级高…

绿盾用户使用看图软件每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看

环境: Win10专业版 绿盾控制台7.0 看图软件FastStone Image Viewer 问题描述: 绿盾用户使用看图软件FastStone Image Viewer每次都需要把图片解密之后才能打开查看,怎么才能不用这么麻烦打开就能看,用户说每次都需要把图片解密之后才能使用,实在是影响效率 解决方案…

0140 数据链路层2

目录 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 1.如果使用5类UTP来设计一个覆盖范围为200m的10BASE-T以太网&#xff0c;需要采用的设备是&#xff08;&#xff09; A.放大器 …

租赁类小程序定制开发|租赁管理系统源码|免押租赁系统开发

随着互联网的发展&#xff0c;小程序成为了一种重要的移动应用开发方式。租赁小程序作为其中的一种类型&#xff0c;可以为很多行业提供便利和创新。下面我们将介绍一些适合开发租赁小程序的行业。   房屋租赁行业&#xff1a;租房小程序可以帮助房东和租户快速找到合适的租赁…

Synchronized同步锁的优化方法 待完工

Synchronized 和后来出的这个lock锁的区别 在并发编程中&#xff0c;多个线程访问同一个共享资源时&#xff0c;我们必须考虑如何维护数据的原子性。在 JDK1.5 之前&#xff0c;Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁…

element表格+表单+表单验证结合运用

目录​​​​​​​ 一、结果展示 二、实现代码 一、结果展示 1、图片 2、描述 table中放form表单&#xff0c;放输入框或下拉框或多选框等&#xff1b; 点击添加按钮&#xff0c;首先验证表单&#xff0c;如果存在没填的就验证提醒&#xff0c;都填了就向下添加一行表单表…

react中hooks分享

一. HOOKS是什么 在计算机程序设计中&#xff0c;钩子一词涵盖了一系列技术&#xff0c;这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…

Spring Boot数据访问基础知识与JDBC简单实现

目录 Spring Boot数据访问基础知识 Spring Data ORM JDBC JPA JDBC简单实现 步骤1&#xff1a;新建Maven项目&#xff0c;添加依赖 步骤2&#xff1a;配置数据源—让程序可以访问到 步骤3&#xff1a;配置数据源—让IDEA可以访问到 步骤4&#xff1a;添加数据库和表 …

人类与机器的分类不同

分类能力也是智能的重要标识之一。通过分类&#xff0c;我们可以将事物或概念进行归类和组织&#xff0c;从而更好地理解和处理信息。分类在人类认知和智能发展中起到了重要的作用&#xff0c;它有助于我们对世界进行认知、记忆、推理和决策。在机器智能领域&#xff0c;分类同…

在WebStorm中通过live-server插件搭建Ajax运行环境

1.下载node.js 官网: https://nodejs.cn/download/ 2.配置Node.js的HTTPS 使用淘宝的镜像&#xff1a; npm config set registry https://registry.npm.taobao.org 也可以使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 配置之后可以验证是否成…

Windows安装子系统Linux

Windows安装子系统(Linux ubuntu&#xff09; 安装条件步骤1.安装WSL命令2.设置Linux用户名和密码3.写个简单的.c程序看看4.如何互传文件 安装条件 Windows 10版本2004及更高的版本才能安装。 步骤 1.安装WSL命令 我们可以使用WSL来安装子系统 Linux ubuntu(默认是这个)。 …

Docker网络模式详解

目录 Docker网络模式 一、Host模式 二、container模式 三、none模式 四、bridge模式 五、Overlay模式 Docker网络模式 安装Docker时会自动创建3个网络&#xff0c;可以使用docker network ls命令列出这些网络。 [rootdocker ~]# docker network ls 我们在使用docker run…

进程、线程、协程

目录 进程、线程、协程的概念 进程、线程、协程的上下文切换 使用协程的注意事项 协程与线程、进程的区别 进程、线程、协程的概念 进程&#xff1a; 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程…

【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

HikariDataSource类的作用和使用

HikariDataSource是一个Java数据库连接池的实现&#xff0c;它属于HikariCP连接池库。连接池是一个用于管理数据库连接的工具&#xff0c;它可以帮助优化数据库连接的创建和销毁过程&#xff0c;提高数据库操作的性能和效率。 HikariDataSource类的作用是创建和管理数据库连接…