成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c++如何實(shí)現(xiàn)多態(tài)雙向的功能

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

我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、玉龍ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的玉龍網(wǎng)站制作公司

不采用模板類,而采用虛函數(shù)實(shí)現(xiàn)多態(tài)性,達(dá)到通用的目的,data域不存儲(chǔ)任何跟類型有關(guān)的信息,而是指針,將數(shù)據(jù)放于抽象類中,由指針與之建立聯(lián)系。

c++如何實(shí)現(xiàn)多態(tài)雙向的功能

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

鏈表指針類型為 鏈表結(jié)點(diǎn)類,結(jié)點(diǎn)的指針域和 data域,都是指針類型,data域 指向一個(gè)抽象類 object對(duì)象  。

object類是一個(gè)抽象類,當(dāng)需要鏈表存放整型數(shù)據(jù),就具體實(shí)現(xiàn)一個(gè)存放整型的子類去繼承這個(gè)類,必須實(shí)現(xiàn)抽象類中的虛函數(shù),以打印函數(shù)為例, 每一個(gè)不同數(shù)據(jù)類型的子類都得有自己的打印函數(shù),而object 不關(guān)心如何打印。

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++如何實(shí)現(xiàn)多態(tài)雙向的功能

鏈表的釋放:

c++如何實(shí)現(xiàn)多態(tài)雙向的功能

class Object
{
public:
	Object()
	{}
	virtual ~Object()//因?yàn)槭翘摵瘮?shù),調(diào)動(dòng)父類析構(gòu)的 同時(shí) 調(diào)動(dòng)子類的析構(gòu)
	{}
	////定義接口   通用的打印
	virtual void Print()const = 0;//純虛函數(shù)  子類繼承了之后必須實(shí)現(xiàn)打印函數(shù)
};
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;
};

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享c++如何實(shí)現(xiàn)多態(tài)雙向的功能內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

網(wǎng)頁(yè)題目:c++如何實(shí)現(xiàn)多態(tài)雙向的功能
文章出自:http://jinyejixie.com/article46/jdoghg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、網(wǎng)站策劃小程序開(kāi)發(fā)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
星子县| 关岭| 丹江口市| 独山县| 安阳市| 晴隆县| 连南| 呼图壁县| 连南| 达尔| 堆龙德庆县| 原阳县| 漯河市| 荣成市| 鄂托克旗| 天峻县| 丹棱县| 神农架林区| 涟源市| 新沂市| 修文县| 抚州市| 巴青县| 郯城县| 綦江县| 盘山县| 福鼎市| 罗甸县| 乐东| 手游| 平湖市| 浮梁县| 新密市| 宁阳县| 滨海县| 普兰店市| 南城县| 太谷县| 绥化市| 白城市| 通化县|