【C++ 02】类和对象 1:初识类和对象

文章目录

  • 🌈 Ⅰ 面向对象介绍
  • 🌈 Ⅱ 类的引入
  • 🌈 Ⅲ 类的定义格式
    • 1. 声明和定义不分离
    • 2. 声明和定义分离
  • 🌈 Ⅳ 类的访问限定符
  • 🌈 Ⅴ 类的作用域
  • 🌈 Ⅵ 类的实例化
  • 🌈 Ⅶ this 指针

🌈 Ⅰ 面向对象介绍

  • C++ 关注的是对象,将一个事件拆分成不同的对象,靠对象之间的交互来完成该事件。
  • 例如:送外卖这整个事件可以拆分成商家、骑手、客户等多个对象,送外卖这整个事件就靠这些个对象来完成。

🌈 Ⅱ 类的引入

  • C++ 的结构体比 C语言 的要厉害那么一些,在 C++ 的结构体中可以定义函数。

在这里插入图片描述

🌈 Ⅲ 类的定义格式

  • 虽然 struct 也能够完成类的工作,但是分工还是要更明确些比较好,C++ 用 class 来作为定义类的关键字。struct 就只完成 C语言 交给它的本质工作就够了。

定义语法

class 类名
{// 类体:由成员函数和成员变量组成
};

1. 声明和定义不分离

  • 声明和定义都放在类体中,成员函数如果在类中定义,编译器就有可能将它当作内联函数处理。

在这里插入图片描述

2. 声明和定义分离

  • 类声明放在 .h 文件,成员函数定义在 .cpp 文件
  • 这种格式的的成员函数在定义时成员函数名前需要加 类名::

在这里插入图片描述

🌈 Ⅳ 类的访问限定符

1. 访问限定符说明

访问限定符限定说明
public公有修饰的成员在类外 可以 直接被访问
protected保护修饰的成员在类外 不能 直接被访问
private私有修饰的成员在类外 不能 直接被访问

2. 访问限定符注意事项

  1. 访问权限的作用域从该访问限定符出现的位置开始知道下一个访问限定符出现时为止

在这里插入图片描述

  1. 如果后面没有访问限定符,作用域就到 } 为止。也就是该访问限定符一直作用到类结束为止。

在这里插入图片描述

  1. class 的默认访问权限为 private,struct 的为 public (struct 要兼容 C语言)。

3. 成员函数和成员变量的权限

  • C++ 不希望能够直接访问和修改成员变量,所以一般是会将类中的成员变量设置成 private。而成员函数设置成 public。

在这里插入图片描述

🌈 Ⅴ 类的作用域

  • 类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员时,需要使用与 ==域用限定符 ::==指明该成员属于哪个类域。
class date
{
public:void Init(int year, int month, int day);
private:int _year;int _month;int _day;
};// 如果不指明 Init 函数的类域是 date,那么就无法使用 date 类的成员变量
// 因为这些成员变量是无法在局部域和全局域找到的,自然会报错了
void date::Init(int year, int month, int day)
{_year = year;_month = month;_day = day;
}

在这里插入图片描述

🌈 Ⅵ 类的实例化

根据类的类型创建对象 (定义变量) 的过程,称为类的实例化

  1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间。
    • 就像 struct 结构体一样,定义一个结构体不会占用任何空间,但是根据定义的这个结构体来创建对象 (变量) 就开辟的空间了。
  2. 一个类可以实例化出多个对象,实例化出的对象占用实际的存储空间,用来存储类的成员变量

在这里插入图片描述

🌈 Ⅶ this 指针

  • 在调用成员函数时,如果不想特殊化成员变量却又想直接调用成员变量,可以使用 this 指针,this 表示调用的变量为本类中的成员变量。
class date
{
public:// this 指针指向的是本类的成员变量void Init(int year, int month, int day){this->year = year;this->month = month;this->day = day;}
private:int year;int month;int day;
};

this 指针的本质

  • 在类中定义的函数实际上都会有一个隐藏的 this 指针,对象在调用类中的某个函数时,会顺带将对象的地址传给该函数。因此 this 指针才能够调用对象内的成员变量。

在这里插入图片描述

  • 将对象的地址传过去之后,公用的函数才能调用对象内私有的成员变量。
  • 每个对象内的成员变量都是独立的,成员函数是公有的
class date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};

在这里插入图片描述

this 指针不能显示写

  • this 指针默认是成员函数的第一个形参,编译器自动生成,你不能写出来。

在这里插入图片描述

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

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

相关文章

【第二届 Runway短视频创作大赛】——截至日期2024年03月01日

短视频创作大赛 关于AI Fil&#xff4d; Festival竞赛概况参加资格报名期间报名方法 提交要求奖品附录 关于AI Fil&#xff4d; Festival 2022年成立的AIFF是一个融合了最新AI技术于电影制作中的艺术和艺术家节日&#xff0c;让我们得以一窥新创意时代的风采。从众多参赛作品中…

ChatGPT高效提问—prompt实践(视频制作)

ChatGPT高效提问—prompt实践&#xff08;视频制作&#xff09; 1.1 视频制作 ​ 制作视频对于什么都不懂的小白来说非常难。而随着AI技术的发展&#xff0c;这件事变得越来越简单&#xff0c;如今小白也可以轻松上手。如何借助ChatGPT来制作短视频。 ​ 其实方法非常简单&a…

《UE5_C++多人TPS完整教程》学习笔记12 ——《P13 加入游戏会话(Joining The Sessions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P13 加入游戏会话&#xff08;Joining The Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是…

【操作系统】3.操作系统的运行环境

3.操作系统的运行环境 3.1.操作系统的运行机制 计算机系统中&#xff0c;通常CPU执行两种不同性质的程序&#xff1a; 操作系统内核程序 用户自编程序&#xff0c;即系统外层的应用程序&#xff0c;或简称“应用程序” 对操作系统而言&#xff0c;这两种程序的作用不同——前…

贪心算法入门题(算法村第十七关青铜挑战)

青铜挑战&#xff1a;贪心其实很简单 贪心算法&#xff08;贪婪算法&#xff09;是指在对问题进行求解时&#xff0c;在每一步选择中都采取最好或者最优的选择&#xff0c;从而希望能够导致结果是最好或者最优的算法。 贪心算法要么得到最优解&#xff0c;要么得到近似最优解…

手把手教你开发Python桌面应用-PyQt6图书管理系统-修改密码UI设计实现

锋哥原创的PyQt6图书管理系统视频教程&#xff1a; PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

Linux第46步_通过“添加自定义菜单”来学习menuconfig图形化配置原理

通过“添加自定义菜单”来学习menuconfig图形化配置原理&#xff0c;将来移植linux要用到。 自定义菜单要求如下: ①、在主界面中添加一个名为“My test menu”&#xff0c;此菜单内部有一个配置项。 ②、配置项为“MY TESTCONFIG”&#xff0c;此配置项处于菜单“My test m…

Spring Security实现权限认证与授权

一、Spring Security Spring Security作为Spring家族的安全框架&#xff0c;在安全方面的两个核心功能是认证&#xff08;Authentication&#xff09;和授权&#xff08;Authorization&#xff09;。 &#xff08;1&#xff09;用户认证指的是&#xff1a;验证某个用户是否为系…

【Java程序设计】【C00265】基于Springboot的地方废物回收机制管理系统(有论文)

基于Springboot的地方废物回收机制管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的地方废物回收机构管理系统 本系统分为管理员功能模块以及员工功能模块。 管理员功能模块&#xff1a;管理员登录系统后…

假期day8多进程与多线程(2024/2/11)

多进程服务器 #include<myhead.h> #define PORT 9999 //端口号 #define IP "192.168.125.113" //IP地址//定义信号处理函数&#xff0c;用于回收僵尸进程 void handler(int signo) {if(signo SIGCHLD){while(waitpid(-1, NULL, WNOH…

EXCEL中如何调出“数据分析”的菜单

今天发现&#xff0c;原来WPS还是和EXCEL比&#xff0c;还是少了“数据分析”这个日常基本做统计的菜单&#xff0c;只好用EXCEL了&#xff0c;但奇怪发现我的EXCEL中没发现这个菜单&#xff0c;然后查了下&#xff0c;才发现&#xff0c;要用如下的方法打开&#xff1a; 1&…

Go+:一种简单而强大的编程语言

Go是一种简单而强大的编程语言&#xff0c;它是在Go语言之上构建的&#xff0c;旨在提供更加强大、灵活和易于使用的编程体验。Go与Go语言共享大部分语法和语义&#xff0c;因此Go开发人员可以很快上手Go&#xff0c;同时也可以使用Go来编写更加简洁和高效的代码。在本文中&…

LeetCode516. Longest Palindromic Subsequence——动态规划

文章目录 一、题目二、题解 一、题目 Given a string s, find the longest palindromic subsequence’s length in s. A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remainin…

STM32自学☞定时器定时中断案例

timer_interrupt.c文件 /* 初始化函数编写步骤&#xff1a; 1.打开时钟 2.选择时基单元的时钟源&#xff08;内部时钟源&#xff09; 3.配置时基单元 4.NVIC配置 5.启动定时器 */ #include "stm32f10x.h" #include "stm32f10x_tim.h" #include …

【数论】exgcd 扩展欧几里得算法

参考&#xff1a;exgcd详解 - zzt1208 - 博客园 (cnblogs.com) exgcd&#xff08;扩展欧几里得算法&#xff09;&#xff0c;用来求形如 a x b y g c d ( a , b ) axbygcd(a,b) axbygcd(a,b)&#xff08; a , b a,b a,b 为常数&#xff09;的方程的一组整数解。&#xff08…

[力扣]编程基础 0 到 1

文章目录 编程基础 0 到 1思路解题方法进行优化 编程基础 0 到 1 【LeetCode】(Python)&#xff1a;1768. 交替合并字符串 思路 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就…

springboot-接入ai机器人 汇总

鱼聪明 Java SDKGitHub - liyupi/yucongming-java-sdk: 鱼聪明 AI 的 Java SDK&#xff0c;几行代码使用 AI 助手能力&#xff01;

CVE-2022-25578 漏洞复现

CVE-2022-25578 路由/admin/admin.php是后台&#xff0c;登录账号和密码默认是admin、tao&#xff0c;选择文件管理。 是否还记得文件上传中的.htaccess配置文件绕过发&#xff0c;在这个文件中加入一句AddType application/x-httpd-php .jpg&#xff0c;将所有jpg文件当作php…

位运算+leetcode(1)

基础 1.基础知识 以下都是针对数字的二进制进行操作 >> 右移操作符<< 左移操作符~ 取反操作符 & 有0就是0&#xff0c;全一才一 | 有一才一 &#xff0c;全0才0^ 相同为0&#xff0c;相异为1 异或( ^ )运算的规律 a ^ 0 a a ^ a 0a ^ b ^ c a ^ (b …

GraphicsMagick 的 OpenCL 开发记录(三十八)

文章目录 AccelerateScaleImage()和AccelerateResizeImage()的性能测试 <2022-05-18 Wed> AccelerateScaleImage()和AccelerateResizeImage()的性能测试 迭代100次&#xff0c;缩小图片50%&#xff0c;如下&#xff1a; [ysouynoarch gm-ocl]$ MAGICK_OCL_DEVICEtrue …