类的访问限定符,实例化,对象存储方式,this指针

news2024/11/13 9:57:08

目录

类的定义

类的两种定义方式:

访问限定符

类的实例化

 类对象的存储方式

this指针


C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现, 会发现struct中也可以定义函数。

结构体的定义,在C++中更喜欢用class来代替。

类的定义

class  className

{

        // 类体:由成员函数和成员变量组成

};  // 一定要注意后面的分号

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略

类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者 成员函数。

类的两种定义方式:

1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。

2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加  类名::

访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选 择性的将其接口提供给外部的用户使用

访问限定符:public(公有),protected(保护),private(私有)

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

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

4. 如果后面没有访问限定符,作用域就到 } 即类结束。

5. class的默认访问权限为private,struct为public(因为struct要兼容C)

访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

类的实例化

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

1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。

2. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。

 类对象的存储方式

每个对象的成员变量存储的内容是不同的,所以需要独立存储,但是每个对象调用成员函数是一样的,放到公共区域即可。

// 类中既有成员变量,又有成员函数

class A1

{

         public:

            void f1(){}

        private:

            int _a;

};

// 类中仅有成员函数

class A2

{

         public:

           void f2() {}

};

// 类中什么都没有---空类

class A3 {};

sizeof(A1) : __4____ sizeof(A2) : ___1___ sizeof(A3) : ___1___ 结论:一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类实例化对象。

this指针

 那当d1和d2调用 公共Init 函 数时,该函数是怎么知道将参数传递给d1的成员变量还是d2的成员变量呢?

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编 译器自动完成。

1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

2. 只能在“成员函数”的内部使用

3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。

4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递

5. this指针是形式参数,存在栈里,在vs下存在寄存器里。

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

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

相关文章

c++11 标准模板(STL)(std::basic_stringbuf)(七)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbu…

SRE方法论之服务质量目标

为了量化客户对服务可靠性的期望&#xff0c;找到客户对可靠性满意的点&#xff0c;我们需要制定针对用户的服务质量目标&#xff0c;并且努力去达到这个质量目标。在这个过程中&#xff0c;我们需要定义一些服务质量指标&#xff08;SLI&#xff09;、服务质量目标&#xff08…

上半年巴比食品增收不增利,下半年失速的团餐业务能否“复苏”?

随着生活节奏逐渐加快&#xff0c;“宅经济”和“懒人经济”快速融合&#xff0c;人们对进餐便利性的要求逐渐提高&#xff0c;更适用于居家消费的食品应运而生&#xff0c;这其中速冻面点既便于烹饪&#xff0c;又方便快捷&#xff0c;因此其率先出圈获得了消费者青睐&#xf…

SparkSQL源码分析系列03-Antlr4分析测试

SparkSQL主要通过Antlr4定义SQL的语法规则&#xff0c;完成SQL词法&#xff0c;语法解析&#xff0c;最后将SQL转化为抽象语法树。所以有必要先了解下Antlr4的工作流程。 ANTLR4是什么&#xff1f; ANTLR 是 ANother Tool for Language Recognition 的缩写&#xff0c;官网&a…

Python:逢七拍腿游戏

场景模拟&#xff1a; 通过在 for 循环中使用 continue 语句实现计算拍腿次数&#xff0c;即计算从1到100&#xff08;不包括100&#xff09;&#xff0c;一共有多少个尾数为7或7的倍数这样的游戏&#xff0c;代码如下&#xff1a; total 99 # 记…

解读李子园2023上半年财报:营收净利双增,未来持续聚焦大单品?

时至今日&#xff0c;饮料界已经分化出了诸多新品类&#xff0c;无糖气泡水、功能饮料、碳酸饮料、茶饮料、含乳饮料等等层出不穷&#xff0c;令人眼花缭乱。这一现象促使全行业产品都在向多样化转变&#xff0c;其中乳制品的结构分化尤为明显。 然而&#xff0c;身处“局中”…

AB跳转轮询:让你的独立站收款智能化

独立站在近两年成为跨境电商的热门布局之一&#xff0c;特别是在亚马逊封号潮后&#xff0c;许多卖家开始转向独立站运营。然而&#xff0c;在迅速发展的同时&#xff0c;也不可避免地出现了一些问题&#xff0c;比如很多卖家的资金经常被不同程度地冻结&#xff0c;好不容易出…

AI问答:JSBridge / WebView 与 Native 通信

一、理解JSBridge JSBridge是一种连接JavaScript和Native代码的桥梁&#xff0c;它提供了一种方法&#xff0c;使得JavaScript可以直接调用Native的代码&#xff0c;同时使得Native的代码也能直接调用JavaScript的方法&#xff0c;从而实现了JavaScript和Native之间的相互调用和…

GNN学习笔记

GNN b站课程跳转------->>>>> 【不愧是公认最好的【图神经网络GNN/GCN教程】&#xff0c;从基础到进阶再到实战&#xff0c;一个合集全部到位&#xff01;-人工智能/神经网络/图神经网络/深度学习。】 https://www.bilibili.com/video/BV1184y1x71H/?share_so…

【C#】条码管理操作手册

前言&#xff1a;本文档为条码管理系统操作指南&#xff0c;介绍功能使用、参数配置、资源链接&#xff0c;以及异常的解决等。思维导图如下&#xff1a; 一、思维导图 二、功能操作–条码打印&#xff08;客户端&#xff09; 2.1 参数设置 功能介绍&#xff1a;二维码图片样…

ELF文件格式分析(一)

目录 一、ELF 格式介绍二、ELF组成部分2.1) ELF Header2.2) Program Headers2.3&#xff09;Section Headers Table2.3.2&#xff09; Section 此篇文章介绍了ELF文件由哪些部分组成&#xff0c;他们的功能是什么&#xff0c;并在文章末尾给出了一份ELF文件解析的参考资料。 一…

通达信袋鼠尾形态选股公式,也称手指线

在《以交易为生》这本书中&#xff0c;作者埃尔德提到“袋鼠尾”形态&#xff08;也称“手指线”&#xff09;&#xff0c;这是作者比较认可的图表信号&#xff0c;很有吸引力&#xff0c;也容易辨认。 袋鼠靠尾巴推动前进&#xff0c;跳跃方向和它的尾巴方向相反&#xff0c;…

Docker容器监控系统

目录 简化描述 Cadvisor InfluxDBGrafana 监控组件架构图 部署 安装docker-ce 阿里云镜像加速器 下载组件镜像 创建自定义网络 创建influxdb容器 创建granafa容器 简化描述 Docker作为目前十分出色的容器管理技术&#xff0c;得到大量企业的青睐&#xff0c;在生产环…

深度解读波卡 2.0:多核、更有韧性、以应用为中心

本文基于 Polkadot 生态研究院整理&#xff0c;有所删节 随着波卡 1.0 的正式实现&#xff0c;波卡于 6 月 28 日至 29 日在哥本哈根举办了年度最重要的会议 Polkadot Decoded 2023&#xff0c;吸引了来自全球的行业专家、开发者和爱好者&#xff0c;共同探讨和分享波卡生态的…

数据结构 - 算法的时间效率和空间效率

一、时间效率 程序在计算机上执行所消耗的时间。 两种估算方式&#xff1a; 事后统计事前分析 算法运行时间 一个简单操作所需的时间X简单操作次数 算法运行总时间 Σ每条语句执行次数&#xff08;即&#xff1a;每条语句频度&#xff09;X该语句执行一次所需的时间 每条语…

【SpringCloud】Hystrix使用

文章目录 Hystrix重要概念使用POM启动类YML示例Global fallback 服务降级&#xff0c;客户端去调用服务端&#xff0c;碰上服务端宕机或关闭服务熔断HystrixCommand中commandProperties参数 Hystrix执行流程服务监控hystrixDashboardPOM Hystrix重要概念 https://github.com/N…

Golang Gorm 更新字段 save update updates

更新和删除操作的前提条件都是要在找到数据的情况下&#xff0c;先要查询到数据才可以做操作。 更新的前提的先查询到记录&#xff0c;Save保存所有字段&#xff0c;用于单个记录的全字段更新它会保控所有字段&#xff0c;即使零值也会保存。 在更新和删除之前&#xff0c;要利…

Python学习笔记_进阶篇(二)_django知识(一)

本章简介&#xff1a; Django 简介Django 基本配置Django urlDjango viewDjango 模板语言Django Form Django 简介 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MVC的软件设计模式&#xff0c;即模型M&#xff0c;视图V和控制器C。它最初是被开发来…

不知道开黑语音哪个软件好?

黑盒语音官方网站&#xff1a;https://chat.top 免费支持AI降噪免费支持高品质立体声免费支持码率128Kbps,192Kbps免费支持上传100M文件免费支持动态房间头像和横幅支持更多自定义动态表情即将支持更多免费功能

Lua 语言笔记(一)

1. 变量命名规范 弱类型语言(动态类型语言)&#xff0c;定义变量的时候&#xff0c;不需要类型修饰 而且&#xff0c;变量类型可以随时改变每行代码结束的时候&#xff0c;要不要分号都可以变量名 由数字&#xff0c;字母下划线组成&#xff0c;不能以数字开头&#xff0c;也不…