当前位置: 首页 > news >正文

《重生到现代之从零开始的C++生活》—— 类和对象1

我嘞个豆,类可是太重要了,简直是重中之重

class为定义类的关键字,stack为类的名字,{}为类的主题

class stack
{void  add (int a,int b){return a+b;}//类的方法,成员函数int _c;int _d;//类的属性,成员变量
};

在成员变量前面一般会加一个特殊标识来区分成员变量

有点像C语言中的struct,结构体的用法

typedef struct list
{int a;int b;
};L

struct在C++中也可以定义类,C++中兼容C中的strcut的用法,同将struct升级为类,所以我们也可以这样

struct stack
{void  add (int a,int b){return a+b;}//类的方法,成员函数int _c;int _d;//类的属性,成员变量
};

struct和class都可以定义类,那么他们有什么区别呢

这就的讲到访问限定符

访问限定符

C++中,用类将对象的属性与方法结合在一起,通过访问限定符将其接口提供外部的用户使用

我们有三个访问限定符public,private 和 protected

pubilc修饰的成员在类外可以直接被访问,protected和private修饰的成员在类外不能被直接访问

class定义成员没有被访问限定符修饰时默认为private,struct默认为public

访问权限作用域从该访问限定符出现的位置到下一个访问限定符出现位置

类域

我们知道有全局域、局部域,还有命名空间,现在又出现了另外一个域,叫类域

类域就是类定义的一个新的作用域,在类体外定义成员的时候,需要用::作用域操作符来指明成员在哪个空间

和命名空间的用法一致

实例化对象

用类类型在物理内存中创建对象的过程,成为类实例化出对象

类是一个抽象的概念,他像是一个房子的图纸,没有分配空间,实例化对象就像是在对着图纸建房子,直到我们实例化出对象的时候才会分配内存

对象的空间

在对象中,肯定包括成员变量,因为内成员变量储存需要空间,但是不包含成员函数

因为成员函数中的代码储存在一个单独的区域,调用的是他们的指针,但是不同的对象调用的指针都是一样的

所以为了节省空间,成员函数的指针不需要储存

当然如果对象中只有成员函数,还是会象征性分配一个字节来表示对象的存在

this指针

this指针是C++在函数调用方便的根本,他是怎么运行的呢

在我们用成员函数的时候,我们已知成员函数在对象中不用储存,那么我们调用成员函数时,他怎么知道他应该访问那个对象呢?

这就要说到this指针

class date
{void init(int a,int b){_a=a;_b=b;}
};
int _a;
int _b;int main (){datr d1;d1.init(1,2);}

这是一个普通的成员函数的调用,那么他怎么知道应该是访问的对象呢?

编译器编译的时候,类的成员函数会默认会在第一个形参的位置增加一个当前类的指针,叫做this指针

所以其实真实原形是这样的

class date
{void init(date*const this, int a,int b){this-> _a=a;this-> _b=b;}
};
int _a;
int _b;int main (){datr d1;d1.init(1,2);}

类的成员函数访问对象,本质是通过this指针访问的

const修饰指针是希望不修改指针本身

当然这是编译器的活,我们在真实使用中不能这么写,否则会报错

http://www.lryc.cn/news/523270.html

相关文章:

  • 《FMambaIR:一种基于混合状态空间模型和频域的方法用于图像恢复》学习笔记
  • 每日十题八股-2025年1月18日
  • 海康威视摄像头RTSP使用nginx推流到服务器直播教程
  • 搭建一个基于Spring Boot的书籍学习平台
  • Go 语言的slice是如何扩容的?
  • Apache Hive--排序函数解析
  • Java 接口安全指南
  • 合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用
  • 38.【3】CTFHUB web sql 报错注入
  • RC2在线加密工具
  • NVIDIA 下 基于Ubuntun20.04下 使用脚本安装 ros2-foxy 和 使用docker安装 ros2-foxy
  • STL容器-- list的模拟实现(附源码)
  • python——句柄
  • KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践
  • ESP8266-01S、手机、STM32连接
  • Web开发 -前端部分-CSS-2
  • 【QT用户登录与界面跳转】
  • 记录一次关于spring映射postgresql的jsonb类型的转化器事故,并使用hutool的JSONArray完成映射
  • 基于 HTML5 Canvas 制作一个精美的 2048 小游戏--day2
  • Django框架:python web开发
  • MySQL、HBase、ES的特点和区别
  • 联发科MTK6762/MT6762安卓核心板_4G智能模块应用
  • Windows7系统下载安装Source Code Pro字库
  • Navicat 17 功能简介 | 商业智能 BI
  • C# winodw TableLayoutPanel 料盒生产状态UI自动生成
  • 提示词的艺术----AI Prompt撰写指南(个人用)
  • 哪些前端打印插件可以实现监听用户选择了打印还是取消
  • 【PyCharm】连接Jupyter Notebook
  • 【Linux系统编程】—— 深入理解Linux中的环境变量与程序地址空间
  • Spark常见面试题-部分待更新