// Test515.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef int DATA;
struct SNode
{
DATA data;
SNode* pNext;
};
struct NodeList
{
SNode* m_nodeHead;
int count;
NodeList()
{
m_nodeHead = NULL;
}
~NodeList()
{
RemoveAll();
}
void AddNode(DATA data)
{
SNode* p = new SNode;
p->data = data;
p->pNext = m_nodeHead;
m_nodeHead = p;
}
void RemoveAll()
{
SNode *p = m_nodeHead, *p1;
while (p)
{
p1 = p;
p = p->pNext;
delete p1;
}
m_nodeHead = NULL;
}
int Input()
{
int i = 0;
cout << "请输入一个数据:";
cin >> i;
return i;
}
void Output()
{
SNode* p = m_nodeHead;
while (p)
{
cout << p->data << endl;
p = p->pNext;
}
}
int GetNodeNum()
{
count = 0;
SNode* p = m_nodeHead;
while (p)
{
p = p->pNext;
++count;
}
return count;
}
void Menu()
{
cout << "请选择:" << endl;
cout << "1.插入数据" << endl;
cout << "2.打印数据" << endl;
cout << "3.打印节点数量" << endl;
int i = 0;
cin >> i;
switch (i)
{
case 1:
AddNode(Input());
break;
case 2:
Output();
system("pause");
break;
case 3:
cout << "节点数量为:" << GetNodeNum() << endl;
system("pause");
break;
default:
break;
}
}
};
int main()
{
NodeList list1, list2;
int i = 0;
do
{
system("cls");
cout << "请选择链表1或2:";
cin >> i;
switch (i)
{
case 1:
list1.Menu();
break;
case 2:
list2.Menu();
break;
default:
cout << "只能输入1或2,输入0则退出。" << endl;
system("pause");
break;
}
} while (i);
return 0;
}
1.析构函数中一般不需要写东西,写的时候只需要考虑对申请过的堆空间进行清理和释放,对象本身占用的无论是栈空间还是全局空间都由系统自动清理。
2.类成员变量的生命周期:对象构造函数执行到析构函数执行对应成员变量生命期开始到结束。
3.类对象的生命周期:(1)局部对象,从定义时调用构造函数开始,在程序离开局部对象的作用域时析构;(2)全局对象,main函数拿到程序的控制权之前,全局对象的生命周期就已经开始,在main函数结束之后,全局对象的生命周期结束;(3)静态对象,在静态对象被定义时生命周期开始,在程序结束时,静态对象生命周期结束。(4)new关键字定义的对象,创建对象时,调用构造函数,对象生命周期开始,什么时候delete,什么时候调用析构函数,对象生命周期随之结束。
4.struct成员变量和成员函数的缺省权限是public的,class成员变量和成员函数的缺省权限是private的。