【C++深入浅出】类和对象上篇(类的基础、类的模型以及this指针)
温馨提示:这篇文章已超过448天没有更新,请注意相关的内容是否还可用!
目录
一. 前言
二. 面向对象与面向过程
2.1 面向过程
2.2 面向对象
三. 类的基础知识
3.1 类的引入
3.2 类的定义
3.3 成员变量的命名规则
3.4 封装
3.5 类的访问限定符
3.6 类的作用域
3.7 类的实例化
四. 类的对象模型
4.1 类对象的大小
4.2 类对象的存储方式
4.3 空类的大小
五. this指针
5.1 this指针的引出
5.2 this指针的特性
5.3 小试牛刀
一. 前言
前几期我们介绍了C++相比C语言新增的一些语法,相信大家已经对C++有了一定的认知。而从本期开始,我们将正式进入C++类和对象的学习,感受C++基于面向对象编程的魅力。在学习过程中,我们将接触到面向对象的三大特性之一:封装。
二. 面向对象与面向过程
在学习编程的过程中,各位想必或多或少都听说过这两个概念。都知道C语言是面向过程的,C++、Jave等语言是面向对象的,那么,究竟什么是面向过程?而面向对象又是什么意思呢?
2.1 面向过程
C语言是面向过程的,关注的是实现的过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
就好像我们要洗衣服,从面向过程的角度来洗衣服的流程图就像下面所示

又或者我们要设计一个外卖点餐系统,从面向过程的角度我们应该设计类似下面的流程:
总结:面向过程关注的是一个个步骤,例如放衣服、手搓以及用户下单等等,通过将这些具体的步骤一步步在函数中实现,使用时再依次进行调用即可。
2.2 面向对象
而C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
回到洗衣服,面向对象关注的就只有四个对象:人、衣服、洗衣粉和洗衣机。人只需将衣服和洗衣服放入洗衣机中即可。至于洗衣机是如何洗衣服、是如何甩干的,我们无需关心。
而对于外卖点餐系统,我们关注的也不是分配骑手、骑手送餐这些具体的步骤,而是关注骑手、商家和用户这三个对象之间的交互,对用户如何下单、骑手如何送餐并不关心。
总结:面向过程关注的完成某件事的对象,例如衣服、洗衣机以及骑手等等。通过描叙这些对象在整件事中的关系和行为,最终得以解决问题。
三. 类的基础知识
3.1 类的引入
在C++中,类是用来描述对象的,是一种用户自定义的数据类型。在C语言中,结构体就是种自定义类型,但其只能用来定义变量。而在C++中,结构体被升级成了类,其不仅可以定义成员变量,还可以定义成员函数。如下:
//实现一个栈类
typedef int DataType;
struct Stack
{
void Init(size_t capacity)
{
//栈初始化
}
void Push(const DataType& data)
{
//栈的插入
}
DataType Top()
{
//取栈顶元素
}
void Destroy()
{
//栈空间销毁
}
DataType* _array;
size_t _capacity;
size_t _size;
};
而在C++中,我们更喜欢用class关键字来替代struct
typedef int DataType;
class Stack //用class来定义一个类
{
//成员函数、类方法
void Init(size_t capacity){}
void Push(const DataType& data){}
DataType Top(){}
void Destroy(){}
//成员变量、类属性
DataType* _array;
size_t _capacity;
size_t _size;
};
3.2 类的定义
类的结构如下所示:
class className //class关键字+类名
{
// 类主体:由成员函数和成员变量组成
}; // 后面的分号不要漏
- class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分
号不能省略。
- 类主体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。
类的定义方式有两种:声明和定义结合、声明和定义分离。
声明和定义结合
即声明和定义都放在类主体中,如下:
class Date { //成员函数的声明+定义 void Print() { cout




