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,属于空指针的解引用,程序直接崩溃。

相关推荐
星夜离尘565 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
_Evan_Yao5 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
Ai-_Man6 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd6 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼6 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
会编程的小孩6 小时前
C++ qt的安装
c++
学逆向的6 小时前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_6 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
thefool1122667 小时前
TCP 1
java·1024程序员节
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程