C# · 12月 20, 2021

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

#include

#include

#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 = %dn”,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;

}

总结

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