C++:构造函数与析构函数

来源:互联网 发布:怎么用手机开淘宝店 编辑:程序博客网 时间:2024/04/28 22:45

构造函数(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++开发交流


扫码关注公众号"CPP开发之路"

原创粉丝点击