敲什么敲
我写了之后才知道,光是想写是不够的,要学的东西还有很多很多。

// 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的。

posted on 2019-05-15 22:58  敲什么敲  阅读(217)  评论(0编辑  收藏  举报