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

C++类和对象(上)

作者头像
用户11970727
发布2025-12-30 16:03:15
发布2025-12-30 16:03:15
1600
举报
文章被收录于专栏:C语言C语言

Hello大家好! 很高兴与大家见面! 给生活添点快乐,开始今天的编程之路。

一 类的定义

1类定义格式【与C语言中的结构体(struct)非常相似但作用更大】

1.1规则:

• class为定义类的关键字,后面跟着的是类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或 者成员函数。 • 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者m开头(有的可能采用驼峰式),注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。 • C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。 • 定义在类⾯的成员函数默认为inline。

我们来定义一个类型:

上面这一串代码中class为类的关键字,Stack为类名,{}中的为类的主体。从结构上看类和C语言中的结构体非常相似,其实类就是C语言中结构体的升级版。但是要注意的是C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数。并且C++中,我们不用typedef。例如:

C++中struct也可以定义类:

区分成员变量:

2 访问限定符
2.1特点

• C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限 选择性的将其接⼝提供给外部的⽤⼾使⽤。 • public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的(他们的区别这里很难讲清楚后续会更新)。 • 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有 访问限定符,作⽤域就到 }即类结束。 • class定义成员没有被访问限定符修饰时默认为private,struct默认为public 。 • ⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。

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

类的正常使用(通常我们把成员函数定义为public,把成员变量定义为private/protected

3 类域

在C++中域分为局部域/全局域/命名空间域/类域,其中局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

3.1特点:

• 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 域操作限定符指明成员属于哪个类域。 • 类域影响的是编译的查找规则, 不影响变量⽣命周期。 注意如果不指定类域的话,在定义函数时,不指明函数其所在域,程序在全局域中找不到函数的声明就会报错。记住编译器的查找规则是先从局部再全局(即先声明/定义,但是会把类当成一个整体所以在类中定义成员变量和成员函数的前后顺序是无关紧要的注重访问限定符即可),不会从类域和命名空间域中查找只有指定了类域和命名空间域才会从中查找。

二 实例化

1实例化概念

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

图像解释:

2特点:

• 类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只 是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。 • ⼀个类可以实例化出多个对象,实例化出的对象 ,占⽤实际的物理空间(即定义类是不占空间的,只有实例化出的对象占空间),存储类成员变量。

3 对象⼤⼩

注意这里对象的大小只包含成员变量的大小,不包含成员函数的内存空间。例如现在实例化出了两个类,分别为A,B。A和B的成员变量是不同的,地址是不同的。但如果访问这两个类的成员函数,他们都会链接到一个地址。所以说我们sizeof(类对象)只用统计成员变量占用的空间。成员变量占用的空间也符合内存对齐规则。之前在C语言结构体中说过,这里就不过多赘述。

两种存储方式的比较:(包含成员函数/不包含成员函数)

三 this指针

1 特点

• 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。所以类的成员函数参数比实际参数多一个。 • 类的成员函数中访问成员变量,本质都是通过this指针访问的。 • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。

2作用

为了解决由于函数体中没有关于不同对象的区分,所引起的不知道访问那个对象。

另外需要注意一点,this指针其实存放在栈区,而不是对象里面(因为this指针是作为形参,而函数调用建立栈帧栈中所以,this指针其实存放在栈区)

接着我们来看个有趣的题目:

下面程序编译运行结果是()

A、编译报错 B、运行崩溃 C、正常运行

题目1

题目2

这两串代码运行的结果并不相同。第一个是正常运行,第二个是运行崩溃。首先我们应该排除的是A选项。因为不管是C语言中还是C++中,解引用空指针并不会编译报错,只会运行崩溃。

我们再来分析问什么第一个是正常运行,第二个是运行崩溃。在第一个程序中我们并没有涉及到开空间的问题。因为成员函数不会占用物理内存,只有成员变量会。我们实例出的类是nullptr说明根本就没开空间。但是第一个程序是不需要访问成员变量的,所以不开空间也没有报错。而第二个程序访问了没开空间的成员变量,所以运行崩溃了。

本篇文章作为c++基础教学入门指南的第二篇,带大家认识和简单使用c++本篇文章就到此结束,欢迎大家订阅我的专栏,欢迎大家指正,希望有所能帮到读者更好理解C++相关知识 ,觉得有帮助的还请三联支持一下~后续会不断更新C/C++相关知识,我们下期再见。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 类的定义
    • 1类定义格式【与C语言中的结构体(struct)非常相似但作用更大】
    • 2 访问限定符
    • 3 类域
  • 二 实例化
    • 1实例化概念
    • 2特点:
    • 3 对象⼤⼩
  • 三 this指针
    • 1 特点
    • 2作用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档