60天干翻C++———— C++ 类和对象

本文介绍了C++中的类与对象概念,包括类的限定符、封装特性、作用域和this指针。详细讲解了构造函数(包括默认构造函数)、析构函数、拷贝构造函数以及运算符重载的重要性。还提到了const成员的使用和注意事项。
摘要由CSDN通过智能技术生成

类和对象的引入

在c语言中,“数据”和“处理数据的函数“是分开声明的,也就是说c语言本身不支持”数据和函数“之间的关联性。也就是说数据处理方法和数据是分离的,举个例子 我们要打印一个学生的成绩
在这里插入图片描述
但是在C++中,student有可能采用独立的“抽象数据模型”
在这里插入图片描述
抽象的类 将数据和处理方式联系在了一起,更加有利于对数据的管理,既然C++这么好,那么我们一起来学习吧。

类的限定符

观察上图 我们看到了 在这里插入图片描述
那么限定符有什么用呢,还有没有别的限定符呢
在这里插入图片描述
【访问限定符说明】

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
  3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
  4. class的默认访问权限为private,struct为public(因为struct要兼容C)

类的特性

类的三大特性 封装 继承 多态 在类和对象初级阶段 主要学习封装。大家注意到有一个private的限定符 ,这样外面就访问不到类里面的数据。只能通过给出的接口进行。这样做一切就有了规章制度,一切都在规定下进行。

类的作用域

在内外定义的类的成员变量需要说明 举个例子
在这里插入图片描述

this 指针

我们还是看一个学生类:
在这里插入图片描述
如果我们对他进行如下操作:

int main()
{
	student s1, s2;
	s1.ADD(65, 54);
	s2.ADD(87, 88);
	return 0;
}

那么问题就来了 ,调用的是一个函数吗,如果是同意个函数怎么区分的呢?
先回答第一个问题,他是一个同一个函数,那么他是怎么区分的呢?
这里就要说到这个this指针
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参
数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该
指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

接下来我们尝试打印this指针

在这里插入图片描述
注意事项 this的空指针问题

在这里插入图片描述

默认成员函数

在这里插入图片描述

构造函数

在这里插入图片描述
构造函数的特点:

  1. 构造函数无返回值
  2. 构造函数可以重载
  3. 构造函数在对象实例化的时候自动调用
  4. 函数名与类名相同
    在这里插入图片描述
    上述程序显示了,对象实例化时自动调用构造函数。
    #//
    构造函数功能:
  5. 内置类型不做处理
  6. 自定义类型自动调用构造函数

在这里插入图片描述
默认构造函数的三种类型:

  1. 无参数的 2. 全缺省的 3. 系统默认生成的

在这里插入图片描述
默认构造函数只能是上述三种,否则则会缺乏默认构造函数。默认构造函数只能有一个。

析构函数

上面是对象初始化的构造函数,下面是对象销毁的析构函数。析构函数有以下特点

  1. 析构函数名是在类名前加上字符 ~。
  2. 无参数无返回值类型。
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构
    函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构
    下面我们以date类为例:
    在这里插入图片描述
    析构函数的最大作用就是防止内存泄露,如果没有内存申请则可以不写。如果有内存开辟,如栈等,则需要释放内存。

拷贝构造函数

拷贝构造函数是构造函数的一种,也是系统自动调用。拷贝构造有深浅拷贝,编译器默认生成的是浅拷贝。
浅拷贝下图为例:
在这里插入图片描述
当你拷贝的类里面有开辟空间时就需要深拷贝。深拷贝是可以给拷贝的类开辟新的空间的拷贝。
注意:如果对栈等需要开辟空间的类,如果使用浅拷贝,则导致在析构函数中一块内存释放两次。
在这里插入图片描述

运算符重载

C++为了增加函数可读性,引入了运算符重载.运算符重载在一定程度上简化了代码。
使用运算符 必须注意: 不要改变原符号的意思!!!
2. 这五个不可以重载: . :: sizeof ?: .* 注意以上5个运算符不能重载。
重载的格式为: 返回类型 operator (符号) ()

在这里插入图片描述
例如某个日期的另一天,在这里我们不具体写出函数体。后面我们会整体实现函数类,以语法复习介绍为主。
在这里插入图片描述
在这里插入图片描述
this指针是内部函数的第一个参数,重载在内部函数也是如此。
重载函数可以显示调用,也可重载调用。
在这里插入图片描述
前置++和后置++的问题
在c++中通过在传参中加入int表明为后置++
在这里插入图片描述
=的重载: =实际可以看做构造函数使用。内置类型的成员直接拷贝。开辟空间的成员变量重新分配空间。

const成员

const是权限的缩小。const成员只能调用const成员函数
在这里插入图片描述
const修饰的是this指针。
注意const指针: 不能扩大权限,可以缩小权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值