C++构造函数和析构函数的使用与讲解

 更新时间:2018年12月22日 15:16:32   作者:蜗牛201  
今天小编就为大家分享一篇关于C++构造函数和析构函数的使用与讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

构造函数(constructor)

1.构造函数是种特殊的类成员函数,遵循如下规则:

  •      a.函数名与类名必须相同。
  •      b.没有返回值

例如:

class Obj
{
...
public:
   Obj()
   {
     ...
   }
};

2.构造函数可以带参数,也可以重载

class Obj
{
...
public:
   Obj()
   {
    ...
   }
   Obj(int x, int y)
   {
    ...
   }
};

3.构造函数和普通成员函数不一样,一般不显示调用。在创建一个对象时,构造函数自动调用(编译器来完成)。

析构函数(destructor)

1.析构和构造是一对相反的过程,对象被创建时调用构造函数,对象被销毁时调用析构函数,遵循如下规则:

  •     a.名称固定,类名前加上波浪线~
  •     b.没有返回值
  •     c.不能带参数

例如,

class Obj
{
public:
  ~Obj()
   {
   }
};

2.析构函数只能有一个,不允许重载。

3.析构函数不显示调用,对象销毁时编译器自动调用。

重新实现链表(使用类,构造和析构函数)

创建DataObj.h头文件

#ifndef _OBJECT_H_
#define _OBJECT_H_
struct Student
{
 char name[32];
 int age;
 Student* pNext;
};
class DataObj
{
public:
 DataObj();
 ~DataObj();
 void add(Student* pStu);
 void find(int age);
 void printNode(Student* pNode);
private:
 Student m_head;
};
#endif

创建DataObj.cpp源文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "DataObj.h"
//构造有头链表
DataObj::DataObj()
{
 m_head.pNext = NULL;
}
DataObj::~DataObj()
{
 //指向每个节点的头部
 Student* p = m_head.pNext;
 //释放所有节点
 while(p)
 {
 Student *next = p->pNext;
 free(p);
 p = next;
 }
}
void DataObj::add(Student* pNode)
{
 //指向每个节点的头部
 Student* p = &m_head;
 //通过头节点查找到链表尾部节点
 while (p)
 {
 if (p->pNext == NULL)
 {
  break;
 }
 p = p->pNext;
 }
 //添加节点到尾部
 p->pNext = pNode;
}
void DataObj::find(int age)
{
 //标记是否找到
 bool bFind = false;
 Student* p = &m_head;
 while(p)
 {
 if (p->age == age)
 {
  bFind = true;
  printNode(p);
 }
 p = p->pNext;
 }
 if (!bFind)
 {
 printf("没有找到该age的节点");
 }
}
void DataObj::printNode(Student* pNode)
{
 printf("name = %s, age = %d\n", pNode->name, pNode->age);
}
int main()
{
 //构造节点
 Student* pStu = (Student*) malloc(sizeof(Student));
 strcpy(pStu->name, "aaaa");
 pStu->age = 30;
 pStu->pNext = NULL;
 {
 DataObj dataObj;
 //添加节点
 dataObj.add(pStu);
 //查找节点
 dataObj.find(31);
 }
 return 1;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • C语言如何输出中文

    C语言如何输出中文

    这篇文章主要介绍了C语言如何输出中文问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 用QT实现计时器功能

    用QT实现计时器功能

    这篇文章主要为大家详细介绍了用QT实现计时器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++详细讲解互斥量与lock_guard类模板及死锁

    C++详细讲解互斥量与lock_guard类模板及死锁

    线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正由其他线程修改的变量。为了防止出现线程某甲试图访 问一共享变量时,线程某乙正在对其进行修改。引入了互斥量
    2022-07-07
  • C++中实现线程安全和延迟执行详解

    C++中实现线程安全和延迟执行详解

    这篇文章主要为大家详细介绍了C++中实现线程安全和延迟执行的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以了解下
    2024-01-01
  • 如何通过UltraEdit解析BMP文件内部结构(BMP位图基础)

    如何通过UltraEdit解析BMP文件内部结构(BMP位图基础)

    我们先打开画图随便画一幅图并采用24位bmp图像格式保存,就得到了一张24位真彩色的位图,下面我们来详细分析bmp位图的各个组成部分,感兴趣的朋友跟随小编一起看看吧
    2021-08-08
  • C语言编程大小端问题示例详解教程

    C语言编程大小端问题示例详解教程

    这篇文章主要为大家介绍了C语言编程大小端问题解决的示例内容详解教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 基于Windows C++ 应用程序通用日志组件的使用详解

    基于Windows C++ 应用程序通用日志组件的使用详解

    众所周知,在调试、跟踪和执行应用程序的过程中,程序的日志能为这些工作提供大量有价值的运行信息。因此,程序的日志对应用程序的运行、维护至关重要
    2013-05-05
  • C 语言基础教程(我的C之旅开始了)[九]

    C 语言基础教程(我的C之旅开始了)[九]

    C 语言基础教程(我的C之旅开始了)[九]...
    2007-02-02
  • C++实现简单学生信息管理系统

    C++实现简单学生信息管理系统

    这篇文章主要为大家详细介绍了C++实现简单学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++入门之list的使用详解

    C++入门之list的使用详解

    这篇文章主要为大家介绍了C++入门之list的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11

最新评论