什么是类?C++为什么要引入类?
简单来说,类就是加入了访问权限的结构体。
C无法做到在结构体中声明和定义函数,只能在结构体中定义变量,但在C++中不仅可以定义变量,也可以定义函数。而引入类(class)就可以对各个成员函数和变量进行权限限制。
那么结构体和类有什么区别?
首先要知道C++的类是有三个访问限定符:public,protected,private.在不加特殊说明情况下,class默认是私有,即出了这个类就不能对里面的成员进行访问;struct是公开的,即使出了这个结构体也能对struct里面的成员变量或函数进行访问。
并且,类还能对内部成员权限进行修改,比如想让某个成员变量或函数变成公有仅需在前面加上public:,而struct无法做到权限修改。
class Data
{
//默认以下是私有成员
int _year;
int _month;
int _day;
public://说明以下是公有成员
Init(int year,int month,int day)
{
_year=year;
_month=month;
_day=day;
}
Print()
{
cout<<_year<<'-'<<_month<<'-'<<_day<<endl;
}
}
值得一提的是,在这里系统并没有为里面的_year _month _day分配空间,故无法对它初始化。
当我们创建好一个Data类后,如何计算它的大小呢?
#include <iostream>
using namespace std;
class Data
{
int _year;
int _month;
int _day;
public:
Init(int year,int month,int day)
{
_year=year;
_month=month;
_day=day;
}
Print()
{
cout<<_year<<'-'<<_month<<'-'<<_day<<endl;
}
}
int main()
{
cout<<sizeof(Data)<<endl;
return 0;
}
执行此段代码后,将会打印12,_year _month _day占了12个字节没错,可是下面函数的大小呢?
假设函数也直接存储在每个类里面,由于每个对象中成员变量是不同的,但是调用同一份函数,当一 个类创建了多个对象时,每个对象中都会保存一份代码,相同的函数代码保存多次,必然会造成空间浪费。
事实上在类中,函数所占的空间并不会存储到类里面,而是存到公共代码区,所以在计算类的大小时不会计算函数的大小。
不难看出,将变量及相关的函数一起放入到一个类中更加有利于形成一个紧密的联系,这种将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互的方式叫做封装。封装是面向对象的三大特性之一,其本质上是一种管理,让用户更方便使用类。
补充:面向对象的三大特性:封装、继承、多态