首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++类与对象(1)

C++类与对象(1)

作者头像
君辣堡
发布2025-12-20 09:01:00
发布2025-12-20 09:01:00
1310
举报

今天我们来了解C++中,类与对象的一些知识。

包括了:类的定义,访问限定符,类域,实例化与内存对齐,this 指针 。

1.类的定义

class为定义 关键字,类的代码实例:

{  }中为类的主体,括号后面有一个不可缺少的分号 ; 类名则和定义一个整型变量a一样。

类中的变量称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数

需要注意,定义在类里面的成员函数默认为inline(内联函数)

说到类,不得不提与其密切相关的访问限定符


1.1访问限定符


访问限定符有三种:public,protected,private 

C++的访问限定符是面向对象编程的核心特点之一,主要用于控制类成员的访问权限,从而实现封装,让对象更完善,提高了代码的安全性与灵活性(可选择性的将类的成员提供给外部的用户使用)

1.public修饰的成员是可以直接被访问和使用的,也就是字面意思,公开的

2.同理,protected和private则是不能被直接访问和使用的

3.class定义的成员没有被访问限定符修饰的默认为privatestruct默认为public

4.访问限定符的作用域仅在其最开始出现的位置开始,下一个出现时结束,若后面再无,则到右大括号  }  结束。说出来恐难以理解,以下是代码示例:

如图所示,相信已非常直观。

接下来,我们再拓展一个知识,类域


1.2类域


类域,即类定义的一个新的作用域。

类的所有成员都在其作用域中,在类体外定义成员时,需要使用  ::这个作用域操作符来指明成员属于哪个类域。


2.实例化

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

类是对象进行一种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只

是声明,没有分配空间,⽤类实例化出对象时,才会分配空间

只有投入使用时,例如一个栈stack,只有我创建了一个栈 stack st,这时候才算实例化,此时才会开空间。

既然开始分配空间后,那对象的空间也会有大小的问题:其实C++规定类实例化的对象也要符合内存对齐的规则。

内存对齐的规则:

1.第⼀个成员在与结构体偏移量为0的地址处。

2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

3.注意:对齐数 = 编译器默认的⼀个对齐数 与 该成大小的较小值。

4.VS中默认的对齐数为8

5.结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。

6.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最⼤对齐数(含嵌套结构体的对齐数)的整数倍。

出个几个小题:

代码语言:javascript
复制
// 计算⼀下A实例化的对象是多⼤?
class A
{
public:
void Print()
{
cout << _ch << endl;
}
private:
char _ch;
int _i;
};

答案:类A实例化对象大小是8字节。

char _ch从0开始占了1字节,然后int _i在第4位开始对齐,占了4字节,中间因为对齐空了3字节空间,总计8字节。

接下来这两题:

代码语言:javascript
复制
class C
{};

class B
{
public:
void Print()
{
//...
}
};

答案:都是1字节

结果反常的不是0,因为给1字节是为了占位,证明其存在过,这点记住即可。


3.this指针

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

指针。

举例:

代码语言:javascript
复制
class Date
{

public:
// void Init(Date* const this, int year, int month, int day)
void Init(int year, int month, int day)
{
_year = year;
this->_month = month;
this->_day = day;
}

private:
int _year;
int _month;
int _day;

};

可看到public后的第一行注释,其中参数与实际的Init函数相差了一个当前类类型的指针,这就是thi指针。C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但可以在函数体内显示的使用this指针(如下)

注意到该指针为 Date* const this,说明不支持修改this指针,this的指向不允许被改变

同时,Init函数内,有 this->_month 的写法,其实一般可以不这么写,此处仅为展示,

类的成员函数中访问成员变量本质都是通过this指针访问的,如Init函数中给_year赋值, this-

>_year = year;

内容如果有误,请在评论区指出,谢谢指导。接下来我会继续更新C++,请大家多多支持哟

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.类的定义
    • 1.1访问限定符
    • 1.2类域
  • 2.实例化
  • 3.this指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档