C++:类和对象(1)

一。类的定义

1.class的标准语法

格式:class 类名{ 访问限定符: 成员 };类末尾分号不可省略

  • 类内变量:成员变量(属性) ;类内函数:成员函数(方法)
  • 编码惯例:在成员变量前面或后面加'---'或者m开头
  • 定义在类里面的成员函数默认为inline

代码演示:

2.class和struct的区别

C++ 中 struct 升级支持内部定义函数,唯一核心差异是默认访问权限 🔴 class 默认全部成员 private;struct 默认全部成员 public

3.类域

类是一个独立的作用域,类的所有成员都在类的作用域中,在类外定义成员时,需要使用::作用域操作符指明成员属于哪个类域

4.三大访问限定符

(1)public:它所修饰的成员可以在类外直接被访问

(2)protected/private:它们修饰的成员在类外不可以直接被访问

说明:

  • 访问权限作用域从该访问限定符出现的位置开始一直到下一个访问限定符出现为止,如果后面没有访问限定符,作用域就到 } ,即类结束
  • class定义成员没有被访问限定符修饰时默认为private,struct默认为public
  • 一般成员变量都会被限制为private/protected,需要给别人使用的成员函数会放为public

5.实例化

(1)概念:用类类型在物理内存中创建对象的过程,称为类实例化出对象

(2)类是对象的一种抽象描述,只是一个模型。用类实例化出对象时,才会分配空间。一个类也可以实例化出多个对象。

(3)对象大小:遵循内存对齐规则。

---> 注意点:如果没有成员变量,那么类对象的大小为一个字节,只是为了占位,表示对象存在

6.this指针(存放在栈)

(1)概念:它是成员函数隐含的形参,是一个指向调用该成员函数的当前对象的指针,例如Init的真实原型为,void Init(Date*const this,int year,int month,int day)。

(2)补充:不能在实参和形参的位置显示的写this指针,但可以在函数体内显示使用this指针

成员函数在访问成员变量时,本质就是通过this指针访问的

补充题目:

1.下面程序运行的结果是:正常运行

解析:

  1. 成员函数不属于对象

Print 是存放在代码段的函数,不是存在对象内存里。对象里面只存成员变量(这里就是 _a )。

p->Print() 本质等价于: A::Print(p) ,把指针 p 传给隐藏的 this 指针。

  1. 这里 Print 函数没有访问任何成员变量,函数内部没有用到 this->_a 。

虽然 this 是nullptr空指针,但是代码没有去解引用访问成员,不会触发崩溃,函数可以正常执行打印。

3.如果在Print成员函数里加上count<<_a<<endl,则程序报错。因为这时候代码等价于this->_a,属于空指针的解引用,程序直接崩溃。

相关推荐
小七在进步1 小时前
类和对象(三)
java·开发语言
6Hzlia1 小时前
【Classic 150 刷题计划】 LeetCode 134. 加油站 | C++ 贪心算法与局部否决逻辑
c++·leetcode·贪心算法
czt_java1 小时前
Java文件IO核心知识点总结
java·开发语言
EatFan1 小时前
从单体到模块化:我的 Spring Boot 项目为什么拆成 framework、module、server?
java·spring boot·后端
szarron1 小时前
HTOOL‑SA12 + HT06 近场探头组合实操|手持设备工位 EMI 预兼容排查完整流程
运维·服务器·开发语言·网络·射频工程·频谱仪
菜鸟~noob2331 小时前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
Java内核笔记1 小时前
Spring Boot 4 可观测性源码剖析:OpenTelemetry 全链路打通日志、指标、追踪
java·后端
6Hzlia1 小时前
【Classic 150 刷题计划】 LeetCode 274. H 指数 | C++ 二分答案法 (单调性降维打击)
c++·算法·leetcode
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之跨域处理
java·开发语言·spring