前言:结束了C++入门的学习紧接着就步入到了C++类和对象的学习,类和对象比C++入门更具有挑战性,类和对象相比C语言就像是进入了一个完全不同的世界,让我们一起探索一下c++类和对象的奥妙。

一,类

1.1类的概念

C++ 中的类(Class)是一种用户自定义的数据类型,用于封装数据(成员变量)和操作数据的方法(成员函数)。类是面向对象编程(OOP)的核心,支持封装、继承和多态等特性。

1.2类的定义
  • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或员变量; 类中的函数称为类的方法或者成员函数。

类的定义与C语言的结构体的定义类似,我们先来看看C语言结构体的定义:

代码语言:javascript

AI代码解释

struct A
{
	//定义各种变量或指针
	int* arr;
	int b;
	//在结构体中嵌套定义结构体
	struct A B;
};

下面我们来看看类的定义,这里举一个之前数据结构的例子:

代码语言:javascript

AI代码解释

class stack
{
//成员函数 
public:
	void Init(int n=4)
	{
			arr=(int*)malloc(sizeof(int)*n);
			if(arr==nullptr)
		{
			perror("malloc申请空间失败");
			return;
		} 
	capacity = n;
	top = 0;
	}
	void push_back(int x)
	{
			st.arr[_size++]=x;
	}
private:
	//成员变量 习惯以下划线_ 开头用于区分类里的变量与成员函数的形参
	int* arr;
	int _size;
	int _capacity;
};

这就是C++定义的一个数据结构栈的类,观察他和上面结构体的区别:

类以class定义,结构体以struct定义;类的内部有成员变量,成员函数,还可以嵌套定义类。而C语言的结构体内部只能定义变量。类还多出了publich和private这样的访问限定符这个后面会介绍。 注意:类里的成员变量一般以下划线_开头,在赋值等操作的时候用于区成员变量与成员函数的形参同名的情况!

所以从本质上来说类就是C++对C语言的结构体进行了一个升级,所以如果在C++中定义了一个结构体那么它将被默认的升级成为类!比如:

代码语言:javascript

AI代码解释

// C++兼容C中struct的⽤法
//在C语言中我们的链表是这样定义的
typedef struct ListNode
{
	struct ListNode* next;
	//这里指针的类型可以不用sturct 因为struct被升级成为了类 类名就是类型
	//ListNode*next;
	int val;
}LTNode;

注意C++是兼容C语言的用法的,但是在C++中定义了结构体后它就会被升级成为类。那么在使用结构体的时候就不用在加struct这个关键字了,因为struct升级成了类,类名就是类型!

注意定义在类里面的函数默认为内联函数,也就是类里面的函数默认是展开的
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐