C++ 类与对象(上)
前言
本文主要围绕类与对象的概念,对该语法做个简单的解释,给大家留一个大概的印象,内容主要涉及以下几点:
1、如何创建类;
2、如何用类来实例化对象;
3、类的简单底层原理等。
类的概念
在C语言中,所有整数被划分为整形(整数类型int)、所有小数被划分为浮点型(浮点数类型float),事实上所有具有相同性质特征的事物都可以被归为一类,例如:人类、昆虫类、爬行动物类等等,在C语言阶段我们通过结构体(struct)来定义这些类型,但利用结构体来定义并使用这些类非常麻烦,因为所有与这个类相关的函数都散乱地分布在文件中,缺乏可维护性。
为了解决C语言出现的这一问题,C++中引入了类(class)的概念,类是一种用户定义的引用数据类型,也称类类型,通过类能更好地将相关属性封装起来管理。
类的定义
语法
//class_name可随意修改
class class_name
{
//类的属性(变量,类型)
//类的方法(函数)
};
//注意不要丢了分号
类中一般可以定义变量、函数和类型,在使用时可以直接通过名字来调用对应的对应的方法和属性即可,极大地提高了代码的整洁性和可读性。另外,C++是一种面型对象的语言,这里所说的对象,这里的对象可以理解为用类来实例化的变量,因为类已经将相关的属性和方法都集合在一起了,所以通过对象即可调用所需的方法即可,类这个语法正体现出封装的特性。
类的使用
前面说到类是如何定义的,接下来详细讲讲类是如何使用的
1.访问限定符
1.1 访问限定符的概念
访问限定符是用来限制外部权限的一种方法,通过访问限定符的限制能有效管理类中的内容。例如,在人类中我们可能用到家庭住址、身份证号、银行卡密码等诸如此类的隐私信息,像此类不方便透露的信息便可以用访问限定符统一管理起来。
public访问限定符:类外成员可直接访问
private访问限定符:类外不可直接访问
protected访问限定符:类外不可直接访问
其中,private与protected虽然都无法被类外成员直接访问,但二者稍有区别,随着继续学习后面继承会讲到二者的差别。
1.2 访问限定符的使用
如图所示:使用访问限定符时直接在类中写上相应的名称在加上冒号即可,需要注意的是,访问限定符的有效范围是1 :之后 } 之前,2 当 } 之前存在其他访问限定符则截止到该访问限定符之前。
2.类域
类域是C++中增加的一种独立的域,类域中的变量名、函数名不会与其他域出现冲突。若想要在其他域中使用类域中的内容就需要使用域访问操作符:: 例如在类中定义的成员函数需要到全局域中实现就得在全局域中通过域访问操作符来调用,如下所所示:
3.类的实例化
通过类来创建对象(变量)这个过程就是类的实例化。
3.1对象的内存大小
3.1.1 非static修饰的类成员
成员变量:实例化对象时占用对象内存空间
成员函数:实例化对象时不占用对象空间,所有相同类型对象公用同一份成员函数
3.1.2 static修饰类成员
static修饰成员函数
静态成员变量:实例化对象时不占用对象空间,属于静态变量
static修饰成员变量
静态成员函数:实例化对象时不占用对象空间
3.1总结:除了非静态成员变量外,其他成员都会占用对象空间,因此编译器为对象开辟的内存大小就等于所有非静态成员变量占用内存的总大小
3.2 类的内存对齐
在C语言阶段,我们讲过结构体的内存对齐,类的内存对齐规则正是结构体的内存对齐,如果忘记的同学可以点击这个链接移步至结构体内存对齐复习一遍,这里就不多讲了。
this指针
this指针的概念
this指针是隐含在每一个非静态成员函数内的一种指针,this指针无需定义,直接使用即可,适用范围仅限该函数内部。this指针指向被调用的成员函数所属的对象。
this指针的使用
1.当形参与成员变量同名时可以用this指针来区分,this指针指向类内部的属性。
2.在类的非静态成员函数中返回对象本身,可以使用return *this。