1. 程式人生 > >單向鏈表&有關類和對象

單向鏈表&有關類和對象

str pub 函數 iostream head nodelist 創建對象 public using

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

單向鏈表&有關類和對象