【C++详解】类和对象(上)类的定义、实例化、this指针
文章目录
- 一、类的定义
- 1、类定义格式
- 2、访问限定符
- 3、类域
- 二、实例化
- 1、实例化概念
- 2、对象大小
- 三、this指针
一、类的定义
1、类定义格式
- class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;
类中的函数称为类的方法或者成员函数。
- 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_ 或者 m开头,小编一般会在成员变量前面加_。
- C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。
- 定义在类⾯的成员函数默认为inline。
(当我们用多个文件管理项目工程时,比如后面我们要实现的日期类,一般类都定义在头文件中,当我们某个文件要访问这个类时就需要包含定义了这个类的头文件,如果类里的成员函数直接定义在类里,成员函数默认是内联的,当有多个文件都包含了这个头文件时就不会发生链接错误,因为内联函数直接展开,不会进符号表。当类里的成员函数声明和定义分离时,也不会报错,因为普通函数本来就必须声明和定义分离,这样一想其实逻辑还蛮自洽的。)
2、访问限定符
- C++⼀种实现封装的方式,⽤类将对象的属性与方法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
- public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的,以后介绍到继承章节才能体现出它们的区别。
- 访问权限作用域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为止,如果后面没有访问限定符,作⽤域就到 }即类结束。
- class定义成员没有被访问限定符修饰时默认为private,struct默认为public。
- ⼀般成员变量都会被限制为private/protected,需要给别人使用的成员函数会放为public。
class Date { public: //成员函数(函数声明或者定义都可以放) private: //成员变量 int _year; int _month; int _day; };
3、类域
1、类定义了⼀个新的作用域,类的所有成员都在类的作用域中,在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。
2、类域影响的是编译的查找规则,上面程序中Date函数是下一节要介绍的构造函数,Date如果不指定类域Date,那么编译器就把Date当成全局函数,那么编译时,找不到_year等成员变量的声明/定义在哪⾥,就会报错。指定类域Date,就是知道Date是成员函数,当前域找不到的_year等成员,就会到类域中去查找。
3、我们这里认识类域还要把它和命名空间域进行比较,类域主要解决的是类和类之间的命名冲突,比如stack和list都可以定义push函数,命名空间域解决的是全局的函数/变量/类型的命名冲突问题,比如在两个命名空间可以分别定义一个stack类。
4、还要区分类域和局部域,我们知道局部域和全局域会影响变量的生命周期,而类域和命名空间域不会影响生命周期,所以类域和局部域是两个平行的东西,不要混一起。
二、实例化
1、实例化概念
- 用类类型在物理内存中创建对象的过程,称为类实例化出对象。
- 类是对象进行⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。
- ⼀个类可以实例化出多个对象,实例化出的对象 占⽤实际的物理空间,存储类成员变量。打个比方:类实例化出对象就像现实中使⽤建筑设计图建造出房⼦,类就像是设计图,设计图规划了有多少个房间,房间⼤⼩功能等,但是并没有实体的建筑存在,也不能住⼈,用设计图修建出房⼦,房⼦才能住⼈。同样类就像设计图⼀样,不能存储数据,实例化出的对象分配物理内存存储数据。
class Date { public: void Init(int year = 1, int month = 1, int day = 1) { _year = year; _month = month; _day = day; } void print() { cout Date d1; d1.Init(2025, 5, 12); d1.print(); return 0; }
- class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。