1、结构体的扩充
在C语言中,我们都学过结构体,它是一种自定义的数据类型,在结构体中我们只能定义变量 。C++语言对结构体进行了扩充,提供了一种更加安全有效的数据类型,它不仅可以在其中定义变量,还可以包含函数,这就是C++中的类。
实列说明:
//C语言中的结构体
struct student{
int age;
float score;
char name[20];
};
//C++中的类
class complex{
public:
double real;
double imag;
private:
void init(double r,double i)
{
real=r;
imag=i;
}
};
解析:其中class
是关键字,必不可少的,相当于struct
。在C++中我们把数据叫做数据成员,把函数叫做成员函数。
2、类的声明
类的声明一般形式如下:
class 类名{
public:
公有数据成员和成员函数
private:
私有数据成员和成员函数
};
在C++中为了保护数据的安全,将类的成员分为三类,分别是:公有成员(用public来声明)、私有成员(用private来声明) 和 保护的成员(用protected来声明)。其中public
、private
和protected
被称作为成员访问限定符。
私有成员(包括成员函数和数据成员)只能被本类中的成员函数访问,而不能被类外的对象访问;公有成员既可以被类中的成员函数访问,也可以被类外的对象访问; 至于保护的成员我会在后面说到。
class
的默认访问权限为private
,struct
为public
(因为struct要兼容C)
问题:C++中struct和class的区别是什么?
解答: C++需要兼容C语言,所以C++中struc
t可以当成结构体去使用。另外C++中struct
还可以用来定义类, 和class
是定义类是一样的,区别是struct
的成员默认访问方式是public
,class
的成员默认访问方式 是private
。
3、类的三大特性之一——封装
类的三大特性分别是:封装、继承和多态。
因为C++中的类的存在,我们将相关的成员放在同一个类中,其中数据表示类的属性,函数表示类的行为,也称为成员函数、方法或者服务。再根据提供的关键字public
、private
和protected
用于声明哪些数据和函数是可以公开访问的,私用的和受保护的,这样就达到了信息隐藏的目的,即让类仅仅公开必须让外界知道的内容,而隐藏其他一切内容,这就是封装。
类的封装特性易学易用,但是不可以滥用,不要把不相干的数据和函数放在一起,什么东西都往里面塞。
4、类的实例化
用类类型创建对象的过程,称为类的实例化。
(1)类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
(2) 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什 么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
5、如何计算类对象的大小?
计算类对象的大小其实就是计算类的大小。
想要知道一个类的大小,就要计算这个类中的数据成员的大小和成员函数的大小。但是类中定义的函数是存放在代码段的,所以一个类的大小只与类中数据成员的大小有关,与成员函数无关。
特殊:空类的大小
class A{
};
空类的大小为1个字节,因为空类也可以被实例化。
注意:
计算类的大小也是要考虑内存对齐的,如果不会内存对齐可以看看我之前写的有关于次方面的博客。