对象与类

本文探讨了C++中的类与对象概念,解析了类作为数据和方法封装的工具,以及如何通过类实现抽象、数据隐藏和封装。文中详细介绍了类的声明、成员函数的实现、构造函数与析构函数的作用,同时解释了预处理器指令防止头文件重复引用的机制。

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

  在编程过程中总是搞不清“类”和“对象”到底是什么,觉得这个概念比较抽象,所以最近重新开始学习对象和类的概念。(参照C++ primer plus)

  引用书中的概念:“类”是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合为一个整洁的包。

  本人比较笨拙,还是觉得上述概念比较抽象-_-||,索性继续学习下去并尝试理解书中所给的代码的含义及使用方法,看了几页书以后认为“类”其实就是一个包,这个包里边有我们可能用到的许多方法,比如#include<math.h>中的math其实就是一个类,它里边定义了许多方法也就是我们使用的函数,诸如exp(),sqrt(),log()等等,这下子对于这个概念至少不是一团浆糊了。随后敲书上的代码学习,在这个过程中有如下发现:

(1)文件头用到了#ifndef,一开始并不理解这句话是什么意思,但是也没有太在意,就直接敲上去了,结果提示“缺少该指令的#endif”,这就一下子懵逼了(看来还是有一点不懂都要弄清楚的,即使第一眼看起来懂不懂无关紧要),在网上查看以后发现这是一种“防止该头文件被重复引用”的方法,那么什么叫做被重复引用呢,我的第一理解是“不能在不同的两个文件中使用include来包含这个头文件”,其实不然,“被重复引用”是指一个头文件在同一个cpp文件中被include了好几次,常由include嵌套造成,比如:在a.h文件中使用了#include“c.h”,然后在b.h文件中使用#include"a.h"和#include“c.h”,此时就会存在c.h重复使用引用的情况。那么头文件重复引用有什么后果呢?

  1、增加编译工作量,导致编译效率降低,对于小工程而言无太大问题(但是大工程的效率低下很痛苦);

  2、引发错误,比如在上述例子中的c.h中定义了全局变量,那么c.h的重复引用就会导致重复定义;

  所以一般在头文件定义中加入#ifndef/#define/#endif这些代码(不加也不会引发错误,但是利于培养好的编程习惯),使用方式如下:

  #ifndef A_H             //if not define a.h

  #define A_H           //引入a.h

  class xxx                //类结构声明

  {

  ......

  }

  #endif                     //与#ifndef对应

 (2)类的设计。

  指定类设计的第一步是提供类声明,声明中一般将数据成员放在私有部分中,成员函数放在公有部分中,C++通过类实现抽象、数据隐藏和封装。

  第二步是实现类成员函数,类成员函数可以通过类对象来调用。

(3)构造函数与析构函数

  构造函数是为了让开发者使用类就像使用其他标准类型一样,比如像int a;一样去初始化对象,构造函数一般又分为两种。

  第一种是默认构造函数,不用提供显式的初始值即可创建对象,如Stock fluffy_the_cat;(Stock是自定义的类),在没有提供任何构造函数的情况下C++将自动提供默认构造函数。

  第二种是非默认构造函数,需要显式的提供初始化值,如Stock(const char *co, int n, double pr);

  而在实际设计中,通常应该提供对于所有类成员做隐式初始化的默认构造函数。

  析构函数是与构造函数对应的,负责跟踪创建的对象,直到其过期为止,对象过期是,程序将会自动调用析构函数,因此在代码中不需要我们显式的调用该函数。(析构函数是没有参数的)

  析构函数是用来完成清理工作的,在实际工作中意义重大,使用方式为:当构造函数使用new来分配内存时,析构函数要用delete来释放内存,而构造函数没有使用类似new来分配内存时,析构函数就没有要实际完成的工作,可以没有返回值和声明类型,析构函数的名称格式是固定的,在类名前加上“~”。

(未完待续)

转载于:https://www.cnblogs.com/LDTSB-0101001/p/9710973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值