C++之类和对象基础
⾯向对象三⼤特性:封装、继承、多态
类和对象
- 一.类的定义
- 1. 类的定义格式
- 2.类域
- 二.实例化
- 1.对象
- 2.对象的大小
- 三.this指针

在 C++ 的世界里,类和对象构成了面向对象编程(Object-Oriented Programming,OOP)的核心框架,如同搭建高楼大厦的基石,支撑起复杂且灵活的程序结构。无论是开发游戏、设计大型软件系统,还是进行底层驱动开发,类和对象的合理运用都能让代码更具逻辑性、可维护性和扩展性。
一.类的定义
类是一种用户自定义的数据类型,它将数据(成员变量)和操作这些数据的函数(成员函数)封装在一起,就像一张设计蓝图,定义了某一类事物的属性和行为。
1. 类的定义格式
C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限选择性的将其接提供给外部的⽤⼾使⽤。
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。
class 类名 {private:// 私有成员变量和函数,只能在类内部访问数据类型 成员变量名;返回类型 私有成员函数(参数列表);public:// 公有成员变量和函数,可以在类外部访问数据类型 成员变量名;返回类型 公有成员函数(参数列表);protected:// 保护成员变量和函数,可在类及其派生类中访问数据类型 成员变量名;返回类型 保护成员函数(参数列表);
};
private、public和protected是访问控制修饰符,用于限定成员的访问权限。
-
public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问,protected和private是⼀样的,以后继承章节才能体现出他们的区别。
-
访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有访问限定符,作⽤域就到}即类结束。
-
class定义成员没有被访问限定符修饰时默认为private,struct默认为public。
-
⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。
在类里定义的函数默认为inline格式,若在类外定义时,也可以通过认为加inline来实现内联
2.类域
类域,简单来说就是类所定义的范围,类中的成员变量和成员函数都处于这个特定的范围之内。在类域中定义的名字(成员变量名、成员函数名等),其作用范围仅限于该类,与类外部的同名标识符相互独立。
比如,在一个Student类中定义了name成员变量,而在类外部的其他地方也定义了name变量,这两个name分别属于不同的作用域,不会产生冲突。
在访问类域中的成员时,需要遵循一定的规则。如果在类的成员函数内部访问类的成员变量,无需特殊的前缀,直接使用变量名即可,因为成员函数本身就处于类域之中,编译器能够明确识别这是类内的成员。例如:
class Student {
private:string name;int age;
public:void setInfo(string n, int a) {name = n; // 直接访问类域内的成员变量nameage = a;}
};
但在类外部访问类的成员时,就需要通过对象或对象指针,并结合点运算符.或箭头运算符->来明确指定访问类域中的成员。像这样:
int main() {Student stu;stu.setInfo("Tom", 20);return 0;
}
类域的存在,一方面实现了数据和操作的封装,将相关的成员变量和函数聚集在一起,增强了代码的内聚性;另一方面,通过限制成员的作用范围,避免了命名冲突,提高了代码的可读性和可维护性。同时,在继承关系中,类域的规则也会影响派生类对基类成员的访问和覆盖,这进一步体现了类域在构建复杂类体系时的重要作用。
二.实例化
1.对象
对象是类的具体实例,就像依据设计蓝图建造出的实际建筑。每个对象都有自己独立的存储空间,存储着类中定义的成员变量的值,并且可以调用类中定义的成员函数。
-
⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。
-
类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。
-
⼀个类可以实例化出多个对象,实例化出的对象占⽤实际的物理空间,存储类成员变量。
2.对象的大小
在计算对象的大小时,内存分配规则基本与C语言结构体一致。
具体可以看此篇博客 : 结构体内存。
但类的内存分配有几个特例:
- 类函数所占的内存,是不计算在类的内存大小当中的。由于每次调用类函数时,所调用的是同一个函数,因此没有比要在每次实例化的过程中为函数分配一块内存,而是分配在了栈区。
- 当类为空时,为表示类的存在,所以会默认给1字节大小的空间。
三.this指针
在 C++ 类的成员函数中,this指针是一个隐含的指针变量,它指向调用该成员函数的对象。this指针在类和对象的交互中起着至关重要的作用,帮助成员函数准确地访问和操作所属对象的成员变量。
编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。
- this 指针的作用
当多个对象调用同一个成员函数时,this指针使得函数能够区分到底是哪个对象在调用它。 - this 指针的使用场景
除了在成员函数中访问成员变量,this指针还常用于函数返回对象自身、解决参数与成员变量同名问题等场景。 - 类的成员函数中访问成员变量,本质都是通过this指针访问的。只不过在这里可以隐式使用,编译器会自动处理。
this指针不能够出现在形参与实参的位置,但是可以在函数体内显⽰使⽤this指针。他只能够在类里使用