亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++如何實現多態雙向的功能

發布時間:2020-10-23 16:20:14 來源:億速云 閱讀:175 作者:小新 欄目:編程語言

這篇文章主要介紹了c++如何實現多態雙向的功能,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

不采用模板類,而采用虛函數實現多態性,達到通用的目的,data域不存儲任何跟類型有關的信息,而是指針,將數據放于抽象類中,由指針與之建立聯系。

c++如何實現多態雙向的功能

鏈表有頭指針 尾指針,以及之后的一系列插入刪除打印操作,這些函數都寫在鏈表類中。

鏈表指針類型為 鏈表結點類,結點的指針域和 data域,都是指針類型,data域 指向一個抽象類 object對象  。

object類是一個抽象類,當需要鏈表存放整型數據,就具體實現一個存放整型的子類去繼承這個類,必須實現抽象類中的虛函數,以打印函數為例, 每一個不同數據類型的子類都得有自己的打印函數,而object 不關心如何打印。

class intobject :public Object
{
public:
	intobject(int d = 0) :data(d)
	{}
	~intobject()
	{}
	void Print()const
	{
		cout << data << "-->";
	}
private:
	int data;
};
////////////////////////////////////////////////////////////
class strobject :public Object
{
public:
	strobject(char *str) 
	{
		if (str == NULL)
		{
			data = new char[1];
			data[0] = '\0';
		}
		else
		{
			data = new char[strlen(str) + 1];
			strcpy(data, str);
		}
	}
	~strobject()
	{}
	void Print()const
	{
		cout << "\"" << data << "\"" << "-->";
	}
private:
	char * data;
};

////////////////////////////////////////////////////////////
class floatobject :public Object
{
public:
	floatobject(float d = 0) :data(d)
	{}
	~floatobject()
	{}
	void Print()const
	{
		cout << data << "-->";
	}
private:
	float data;
};
////////////////////////////////////////////////////////////

void main()
{
	list mylist;
	for (int i = 0; i < 5; ++i)
	{
		intobject *pi = new intobject(i);
		mylist.push_back(pi);
	}
	mylist.printlist();

	char* arr[5] = { "affd", "fdas", "fdfss", "ere", "qret" };
	for (int i = 0; i < 5; i++)
	{
		strobject*ps = new strobject(arr[i]);
		mylist.push_back(ps);
	}
	mylist.printlist();

	float brr[5] = { 0.34, 54.32, 0.53, 43.2, 5.878 };
	for (int i = 0; i < 5; i++)
	{
		floatobject*ps = new floatobject(brr[i]);
		mylist.push_back(ps);
	}
	mylist.printlist();
}

c++如何實現多態雙向的功能

鏈表的釋放:

c++如何實現多態雙向的功能

class Object
{
public:
	Object()
	{}
	virtual ~Object()//因為是虛函數,調動父類析構的 同時 調動子類的析構
	{}
	////定義接口   通用的打印
	virtual void Print()const = 0;//純虛函數  子類繼承了之后必須實現打印函數
};
class list;

class listnode
{
	friend class list;
public:
	listnode()
	{
		data = NULL;
		next = NULL;
	}
	listnode(Object *pobj)
	{
		data = pobj;
		next = NULL;
	}
	~listnode()
	{
		delete data;
		next = NULL;
	}

private:
	Object *data;
	listnode *next;
};

class list
{
public:
	list()
	{
		head = tail = new listnode;
	}
	~list()
	{
		listnode *delp = head->next;
		while (delp!= tail)
		{
			head->next = delp->next;
			delete delp;
			delp = head->next;
		}
		delete head;
		head = tail = NULL;
	}
	void push_back(Object *pb)//尾插
	{
		listnode *s = new listnode(pb);
		assert(s != NULL);
		tail->next = s;
		tail = s;		
	}
	void printlist()const
	{
		listnode *p = head->next;
		while (p != NULL)
		{
			p->data->Print();
			p = p->next;
		}
		cout << "NULL" << endl;
	}
private:
	listnode *head;
	listnode *tail;
};


////////////////////////////////////////////////////////////
class intobject :public Object
{
public:
	intobject(int d = 0) :data(d)
	{}
	~intobject()
	{
		cout << "delete int" << endl;
	}
	void Print()const
	{
		cout << data << "-->";
	}
private:
	int data;
};
////////////////////////////////////////////////////////////
class strobject :public Object
{
public:
	strobject(char *str) 
	{
		if (str == NULL)
		{
			data = new char[1];
			data[0] = '\0';
		}
		else
		{
			data = new char[strlen(str) + 1];
			strcpy(data, str);
		}
	}
	~strobject()
	{
		cout << "delete string" << endl;
		delete []data;
		data = NULL;
	}
	void Print()const
	{
		cout << "\"" << data << "\"" << "-->";
	}
private:
	char * data;
};

感謝你能夠認真閱讀完這篇文章,希望小編分享c++如何實現多態雙向的功能內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節
推薦閱讀:
  1. C++多態的原因
  2. c++ 多態

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庐江县| 云安县| 琼中| 巴南区| 德钦县| 阳山县| 马山县| 瑞金市| 昭苏县| 定远县| 盐边县| 湟中县| 梁山县| 武穴市| 万全县| 漳平市| 凤阳县| 信丰县| 沈丘县| 枣阳市| 平阴县| 利津县| 长春市| 呼伦贝尔市| 鸡东县| 阳城县| 兰坪| 碌曲县| 宜昌市| 安乡县| 明光市| 嵊州市| 错那县| 寻乌县| 车险| 新田县| 鸡泽县| 米易县| 武川县| 韶山市| 米脂县|