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

相关推荐
大侠归来5 分钟前
C 语言 | 在函数中操作数组
c语言·c++·算法
liangshanbo121515 分钟前
JavaScript 面试题:Object.keys() 的返回顺序是无序的吗?
开发语言·javascript·ecmascript
朝朝辞暮i6 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
leikooo7 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
小师兄吃牛肉7 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记7 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
随意起个昵称8 小时前
【背包dp】输出方案路径
c++·动态规划
言乐68 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779138 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
Ivanqhz8 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习