C++入门之类与对象(上)——初步认识

本文详细介绍了C++中的类与对象,包括面向过程与面向对象的区别,C++中struct和class的特性,封装的概念,类对象模型,以及this指针的用途。文章特别强调了类中的成员函数和变量的存储方式,以及类的实例化和this指针在区分不同对象中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、类与对象的初步认知

1.面向过程和面向对象的初步认识

(1)面向过程

(2)面向对象

二、类的引入

1.C++中的struct

(1)C++中的struct与C中struct的不同

(2)C++中的struct特性

2.C++中的class

(1)类的定义

 (2)类的访问限定符及封装

(3)类的两种定义方式

三、封装

1.面向对象的三大特性

2.封装的含义

(1)含义

(2)封装的本质

(3)C与C++的封装

三、类对象模型

1.类对象的大小

 2.类对象的存储方式

(1)对象 中包含类的各个成员

(2)代码只保存一份,在对象中保存存放代码的地址

(3)只保存成员变量,成员函数存放在公共的代码段

3.特殊的类的大小

(1)类中只有成员函数,没有成员变量

(2)空类

四、类的实例化

(1)类的含义

五、this指针

 1.this指针的含义

2.this指针的作用

3.this指针的特性

4.this指针的存储位置

 5.this指针为空


一、类与对象的初步认知

在学习c语言时,想必很多人都听到过面向过程和面向对象这两个词。但是受限于当时对语言的认知,一般不会对其进行了解。但是到了C++学习类与对象时,我们就要对“面向过程”和“面向对象”这两个词有一个初步的认知。

1.面向过程和面向对象的初步认识

(1)面向过程

我们常说c语言是面向过程的语言,那么面向过程是什么意思呢?简单来讲,就是指c语言在使用中关注的是过程,即分析出求解问题的步骤通过函数调用逐步解决问题

 以洗衣服为例子,如果用c语言解决洗衣服这一问题,那么我们就需要经过如下几个步骤:

 这每一个步骤都可以看做是一次函数定义和函数调用。可以看到,用c语言来写就会非常的复杂,每一个步骤都需要自己去完成。

(2)面向对象

而C++是面向对象的,关注的是对象。这里的对象指的就是C++会将一个问题分解为不同的部分,每个部分交给不同的对象,靠对象之间的交互完成

同样以洗衣服为例,在C++中,洗衣服就可以看成如下图所示:

 C++要解决洗衣服问题,就会将其划分出四个对象,分别是“人、衣服、洗衣服和洗衣机”,将整个问题交给这四个对象来完成。

二、类的引入

1.C++中的struct

(1)C++中的struct与C中struct的不同

C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:如果我们用C语言方式实现的栈,结构体中只能定义变量。但是在C++中,结构体struct中也可以定义函数

struct Stack
{
    void Init()
    {
        data = nullptr;
        top = 0;
        capacity = 0;
        cout << "Init" << endl;
    }
    void Push()
    {
        cout << "Push" << endl;
    }

    int* data;
    int top;
    int capacity;
};

在上面的程序中我们可以看到,在C++中的struct既可以定义变量,也可以定义函数。

(2)C++中的struct特性

struct Stack
{
    void Init()
    {
        data = nullptr;
        top = 0;
        capacity = 0;
        cout << "Init" << endl;
    }
    void Push()
    {
        cout << "Push" << endl;
    }

    int* data;
    int top;
    int capacity;
};

1.同一个struct中的变量可在内部随意使用

同样以上面的程序为例,我们可以看到,在struct中定义的函数Init()中我们使用了在struct中定义的data、top等变量。这是为了能够更加方便的在结构体内定义函数

2.同一个结构体中的变量的位置没有固定要求

从上面的程序我们可以看到,定义在结构体中的变量并没有像以前那样放在函数的最上面,而是放在了最下面。但是这个结构体依然可以正常使用。原因是struct中的函数在调用变量时会先从其函数内部找,找不到时再在整个结构体中去寻找,而不是像以前那样只从函数的上面查找。这样就避免了struct中的变量一定要放在函数上面的问题。

2.C++中的class

(1)类的定义

class为定义类的关键字ClassName类的名字{}中为类的主体,注意类定义结束时后面的分号不能省略

类体中的内容类的成员,类中的变量称为类的属性成员变量类中的函数称为类的方法或者成员函数

 基本形式如图所示:

(2)类的访问限定符及封装

1.访问限定符

访问限定符,顾名思义就是用来限制访问的符号。而类的访问限定符就是用来限定对类的访问。这里的访问限定符就涉及到了C++的封装。

在C++中,实现封装的方式是用类将对象的属性和方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用

 类中提供了三种访问方式:public、protected、private。即如图所示

 2.访问限定符说明

(1)public

public的英文释义为公有,在C++中,由public修饰的成员在类外可以直接被访问

 (2)protected和private

protected和private的英文释义分别有保护和私有的含义。private所修饰的成员在类外不能直接被访问。而protected与private的作用是类似的,但目前阶段我们不能完全理解protected的作用,可以暂时理解为和private的作用相同

 从上图中可以看到,当我们在类外调用由private修饰的类成员时,程序直接报错了,这也说明了这些由private修饰的成员是不能在类外被直接访问的

(3)访问权限作用域

在类中,一个访问权限的作用域是从该访问限定符出现的位置开始直到下一个访问限定符出现为止。如果后面没有访问限定符作用域就到},即类结束

 从上面的两张图中我们可以看到,第一幅中只有一个public修饰,因此public的作用域就是直到这个类的结尾;而第二幅中存在public和private两个访问权限&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值