前言
C语言面向过程,采用的是调用函数来逐步解决问题。C++面向对象,通过各个对象之间的交互来解决问题。
一、类的基本概念:
1.类的引入:
C语言中,我们都知道struct结构体中可以定义变量。但是在C++中,结构体中不仅可以定义变量还可以定义函数。
struct Stack
{
void Init(int capacity = 5)
{
_array = (int*)malloc(sizeof(int) * capacity);
if (nullptr == _array)
{
perror("malloc申请空间失败");
exit(-1);
}
_capacity = capacity;
_top = 0;
}
int* _array;
int _capacity;
int _top;
};
2.类的定义:
C++更喜欢使用class来定义类:
class ClassName//类名
{
// 类体
};
- class为定义类的关键字
- ClassName为类名
- 类体中包含成员变量和成员函数
类的两种定义方法:
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。
3.类的访问限定符和封装:
先来谈谈什么是封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
对类使用访问限定符可以更好的使用类,通过访问选择性将其接口提供给用户使用,而封装也让类安全性更高。
类的访问限定符有三种:
- public(公开)
- protected(保护)
- private(私有)
说明:
- public修饰的成员可以直接被访问。
- private和protected修饰的成员在类外不能被直接访问(这点上两者类似)。
- 访问权限作用域从当前访问限定符到下一个访问限定符结束。
- 如果后面没有访问限定符了,作用域一直到类尾
- class默认访问权限为private,struct默认为public
4.类的实例化:
用类创建对象的过程就叫类的实例化。
- 类是对对象的描述,类就好比一张房子的建造图纸,而对象是实际建造出来的房子
- 类可以实例化多个对象,且对象占有实际的物理空间。
- 类是没有空间的,实例化的对象才有空间
二、this指针:
1.this指针的引出:
看如下代码:s1和s2两个对象分别调用Init函数,函数是怎么区分它们的呢?
int main()
{
Stack s1;
Stack s2;
s1.Init();
s2.Init();
return 0;
}
C++使用this指针解决了这个问题,在调用函数时,编译器会自动将对象的地址传参,同时函数内部使用this指针接受,this指针类型是*const,this本身不可被修改,这些都是编译器自动实现的,不需要用户手动传递。
2.this指针的特性:
- this指针类型为* const,本身不可修改
- 只能在成员函数中使用
- this指针实际上是成员函数的形参,并非存在对象中
- this指针无需用户手动传递,编译器会自动实现
总结
以上就是今天讲的类和对象上的内容,主要讲解了类和对象的基本概念以及this指针,希望刚刚阅读本篇博客的你有所帮助!