今天我们介绍类和对象,C++是基于对象的,所关注的是对象
一、对象
·我们可以把世间客观的事物看成一个对象;例如:人,比如我叫张三,张三就可以被看成是一个对象,张三这个人由很多的事物所组成,比如年龄,姓名等这些就是组成张三这个人的因素(也可以用其他方面定义张三比如两只眼睛一个鼻子等)这些因素可以看作是他的内部结构也叫类成员变量, 张三这个人可以做很多事情,比如送外卖、敲代码这种行为,可以看作是一种函数叫类成员函数
二、类
类(class)是对象的抽象,不占用内存空间。对象是类的具体事例,占用内存空间。类是对象的类型。翻译一下就是我们把张三这样的相同的对象规定成一个类型,他们的内部结构还有能做的事情是一样的
三、如何定义一个类
定义一个类有两种方式一种用struct 关键字 另一种用class 关键字 我们通常使用class来定义一个类
struct student
{
};
class data
{
};
struct和class有什么区别呢?
首先struct 不仅可以定义类也可以定义结构体,C++是包含C的所以C中的struct用法也保留了下来,并且struct定义的类的成员默认访问方式是public,而class默认为private
四、访问限定符public、protect、private
class data
{
public:
//可以被外部访问
private:
//这里的不可以通过外部直接访问,但是可以通过类内的接口访问,protect功能相仿
};
五、类的作用域
struct Student //struct 默认访问权限是public的
{
public:
void increat(const char* name , const char* gender , const int age)
{
strcpy(_name,name);
strcpy(_gender,gender);
_age = age;
}
void print();
private:
char _name[20];
int _age;
char _gender[5];
};
void Student::print() //这里如果想使用print这个函数则要使用 类名加::才能够从类中获取类成员变量
{
cout << "姓名:" << _name << endl << "性别:" << _gender << endl << "年龄:" << _age << endl;
}
print的使用要指定student这个类
六、类的实例化
用类类型创建对象的过程,称为类的实例化
1.定义一个类只是定义了一个模型,限定了其中有哪些成员,实际并没有分配空间给他存储
2.一个类可以实例化出多个对象,每个对象都会分配地址空间,存储类成员变量,类成员函数存储在公共区
3.如何实例化 类名 + 对象名;
int main()
{
Student jwt;
jwt.increat("JWT", "男",21 );
jwt.print();
return 0;
}
七、如何计算类的大小
首先类中存放的有类成员变量和类成员函数
如果创建n个对象,则会在内存中创建n个成员变量和n个成员函数,这样则会占用大量的存储空间,所以我们将成员函数存放在公共区,对象的大小只跟成员变量有关
如何计算成员大小? 这要根据结构体对齐规则来进行计算
1. 第一个成员在与结构体偏移量为0的地址处
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是 所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
在类中没有成员变量时,编译器会自动添加一个占位字节来占位,以表示这个类的存在,同理只有一个成员函数的也如此



