1.什么是类和对象?
在C语言中,并没有类和对象这个概念。而在C++中,引入了这个概念。提到类和对象,我们先要了解什么是面向过程和面向对象。
在一个外卖系统中,面向过程的设计思路是将送餐、下单、接单等操作直接罗列出来并单独进行设计。而对于面向对象,我们可以设计出用户、商家、配送员这三个类。而用户下单、商家接单、配送员送餐则是不同类之间的交互操作。
在C语言中实现栈,我们会通过一个结构体储存一个栈的所有数据:指向栈空间的指针、栈顶元素、栈的大小等数据。而操作栈的函数则与数据分离,保存在栈结构体之外。
而在C++中,我们可以将操作栈的这些函数与数据一同保存在一个自定义类型中,构成一个类。
struct stack
{
int* a;
int top;
int capacity;
void push(int x)
{
//...
}
void pop()
{
//...
}
};
2.类的定义
在C++中定义一个类的方式如下:
class a
{
int x;
void fun();
};
其中,class表明了a是一个类,变量x和fun函数分别是a类的成员变量与成员函数。
可以看到,类的结构与C语言中结构体十分类似。实际上,C++中也可以使用struct关键字构造类。
而class与struct定义出的类有所不同,这里我们要了解什么是访问限定符。
3.类的访问限定与封装
我们知道,在C语言中,所有的数据都可以直接进行操作。例如对于一个栈,我们可以直接使用push函数以进行压栈操作,但我们也可以通过在栈的顺序表末尾插入一个元素达到相同的效果。我们甚至可以在顺序表的任意位置进行元素的插入,以达到随机位置插入的效果,但是很明显这违反了栈的性质。
可以看出,C语言对于数据没有任何的保护措施,使得用户可以直接对数据进行操作。而这种没有限定的操作很容易产生错误,就像例子中对栈的任意位置进行插入一样。
所以C++中对这样的问题进行了处理,既访问限定。
访问限定符有三:
public//公有:在类的内外都可以进行访问
protected//保护:只有类的内部可以进行访问
private//私有:同protected,两者的差异在继承部分才会体现,这里暂不说明
通过使用这些访问限定符,就可以对数据或者函数进行访问限定,只将部分接口提供给外部用户使用。例如一个栈只对外提供压栈、出栈等操作,而不对外提供自身的顺序表。这样就达到了封装的目的。
了解了访问限定符,我们就可以解答在C++中class与struct的区别了。
class定义出的类的默认成员访问方式是private,而struct定义出的类的默认成员访问方式是public。
最后,我们浅谈一下封装。
作为面向对象的三大特性(封装,继承,多态)之一,封装将数据与操作方式进行了结合,使得原本暴露在外的数据与实现的细节隐藏起来,只提供对外公开的接口供用户使用。这样做大大增强了代码的安全性,实现了对代码的管理。