Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

设计一个c++ 通用链表:实现多态双向的功能 之前用c实现的通用链表, 将链表的data域从具体类型转变为 void*指针 ,用c实现时费力气的是指针的赋值和也要做到通用的打印

链接:c实现的通用的双向链表现在用c++重新实现,思想大都一致:

不采用模板类,而采用虚函数实现多态性,达到通用的目的,data域不存储任何跟类型有关的信息,而是指针,将数据放于抽象类中,由指针与之建立联系。

链表有头指针 尾指针,以及之后的一系列插入删除打印 *** 作,这些函数都写在链表类中。

链表指针类型为 链表结点类,结点的指针域和 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] = '
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] = '[+++]';
		}
		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;
};
'; } 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语言使用utlist实现的双向链表

Java语言中链表和双向链表_MySQL

以上就是设计一个c++ 通用链表:实现多态双向的功能的详细内容,)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 29, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)

Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

设计一个c++ 通用链表:实现多态双向的功能 之前用c实现的通用链表, 将链表的data域从具体类型转变为 void*指针 ,用c实现时费力气的是指针的赋值和也要做到通用的打印

链接:c实现的通用的双向链表现在用c++重新实现,思想大都一致:

不采用模板类,而采用虚函数实现多态性,达到通用的目的,data域不存储任何跟类型有关的信息,而是指针,将数据放于抽象类中,由指针与之建立联系。

链表有头指针 尾指针,以及之后的一系列插入删除打印 *** 作,这些函数都写在链表类中。

链表指针类型为 链表结点类,结点的指针域和 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] = '
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] = '';
		}
		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;
};
'; } 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语言使用utlist实现的双向链表

Java语言中链表和双向链表_MySQL

以上就是设计一个c++ 通用链表:实现多态双向的功能的详细内容,)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 29, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)

设计一个c++ 通用链表:实现多态双向的功能_C_内存溢出

设计一个c++ 通用链表:实现多态双向的功能

设计一个c++ 通用链表:实现多态双向的功能,第1张

设计一个c++ 通用链表:实现多态双向的功能 之前用c实现的通用链表, 将链表的data域从具体类型转变为 void*指针 ,用c实现时费力气的是指针的赋值和也要做到通用的打印

链接:c实现的通用的双向链表现在用c++重新实现,思想大都一致:

不采用模板类,而采用虚函数实现多态性,达到通用的目的,data域不存储任何跟类型有关的信息,而是指针,将数据放于抽象类中,由指针与之建立联系。

链表有头指针 尾指针,以及之后的一系列插入删除打印 *** 作,这些函数都写在链表类中。

链表指针类型为 链表结点类,结点的指针域和 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] = '
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] = '';
		}
		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;
};
'; } 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语言使用utlist实现的双向链表

Java语言中链表和双向链表_MySQL

以上就是设计一个c++ 通用链表:实现多态双向的功能的详细内容,

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/686024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-20
下一篇 2022-04-20

发表评论

登录后才能评论

评论列表(0条)

保存