资讯动态

【C++】类与对象入门

发布时间:2026/10/14 4:30:34 来源:尧图企业网站定制
引言这篇博客将从C语言的结构体进化到C的类初步理解面向对象最基础的核心类、对象、封装、this指针。一、类和对象是什么类是对一类事物的抽象描述相当于图纸。它只声明有哪些成员变量属性、成员函数方法没有分配内存空间。对象用类在内存中创建出来的实体这个过程叫做实例化。就像拿着图纸盖房子图纸就是类盖出来的每一套房子就是对象。举个例子Stack类描述栈有数组、容量、有效数据个数还有入栈、出栈的操作实例化之后就得到一个实实在在的栈对象占用内存可以存数据。 一个类可以实例化多个独立对象每个对象都有自己独立的成员变量。二、类的定义2.1 类定义格式使用关键字class定义类注末尾分号不能省略补充C中struct也可以定义类。C语言struct只能放变量C的struct可以定义成员函数默认访问权限是public而class默认是private。工程上推荐优先用class。编码习惯成员变量名字前后加_或者m区分局部变量不是语法强制是工程规范。2.2 访问限定符封装访问限定符是C实现封装的手段控制类外部能不能直接访问成员public公有的类外面可以直接访问private私有的类外不能直接访问class 默认protected保护的类外不能直接访问继承场景才体现和 private 的区别访问权限从出现开始直到下一个限定符为止没有写限定符class 默认privatestruct 默认public。设计习惯成员变量写 private/protected对外提供的接口函数写 public。不让外部随意修改内部数据只通过提供的函数操作这就是封装。2.3 类域类定义了一个新的作用域类里面所有成员都属于这个类域。如果在类外面定义成员函数必须使用作用域解析符:: 指明这个函数属于哪个类。查找规则调用成员函数时编译器先找局部变量找不到就到当前类域中查找成员。例如Stack::InitStack:: 就代表去Stack这个类域里面找Init函数。三、实例化3.1实例化概念实例化用类类型在物理内存中创建对象的过程。类只是抽象的模型只有实例化出对象才分配内存空间。多个对象各自拥有独立的成员变量。类比类 建筑图纸对象 盖出来的房子。图纸本身不能住人实例化出来的房子才能存放东西同一个图纸可以盖多套独立房子。3.2对象的大小对象大小只计算成员变量成员函数不占用对象内存。计算遵循内存对齐规则第一个成员放在偏移量 0 地址处。后续成员变量对齐到对齐数的整数倍地址对齐数 编译器默认对齐数VS 默认 8和该成员大小的较小值。类总大小必须是【类中最大成员对齐数】的整数倍。如果包含嵌套结构体整体对齐要考虑嵌套结构体的最大对齐数四、this 指针同一个类的成员函数多个对象调用它函数怎么知道当前操作的是哪一个对象C 编译器增加了一个隐藏参数this 指针例如1.编译器底层实际处理后就变成了这里可以忽略警报因为this指针不能在形参、实参位置显示一般也不会这样写2.在调用对象成员函数时编译器自动把对象地址传给this指针。3.this指针本身是Date * const this指针本身不能修改不能让 this 指向别的对象指向的内容可以修改。4.this指针一般存储在栈或寄存器上五、C 语言和 C 实现Stack的对比C语言版本Stacktypedef struct Stack { int* array; int capacity; int top; }Stack; void StackInit(Stack* st) { st-array NULL; st-capacity 0; st-top 0; } void StackPush(Stack* st, int x) { }C类实现Stackclass Stack { private: int* _array; int _capacity; int _top; public: void Init() { _array nullptr; _capacity 0; _top 0; } void Push(int x) { } };C语言C类数据与函数struct 只存数据函数是全局独立函数成员变量 成员函数封装在同一个类传参手动传递结构体指针编译器自动隐式传递 this 指针访问控制无访问权限结构体成员全部可外部修改private/public 控制访问保护内部数据

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑