C++ list中存储不同的类,求源码,初学者,要能编译通过的, 120
classTeacher{public:Teacher();virtual~Teacher();charm_TeacherName[128];charm_TeacherI...
class Teacher
{
public:
Teacher();
virtual ~Teacher();
char m_TeacherName[128];
char m_TeacherID[128];
int m_age;
};
class Student
{
public:
Student();
virtual ~Student();
char m_StudentName[128];
char m_StudentID[128];
char m_class[128];
int m_TotalScore;
};
上面是两个基础类,现在我要实现的功能是,用list来存储Teacher和Student对象,且将List作为传输,如list的第一个节点存储的Teacher,第二个节点存放的是Student,第三个节点存放的是字符串“JiaLiDun University”,解析的时候只要顺序解析就能得到对应的类和字符串。请实现class CMyList(为通用的类,调用的时候传入别的类也能使用) 展开
{
public:
Teacher();
virtual ~Teacher();
char m_TeacherName[128];
char m_TeacherID[128];
int m_age;
};
class Student
{
public:
Student();
virtual ~Student();
char m_StudentName[128];
char m_StudentID[128];
char m_class[128];
int m_TotalScore;
};
上面是两个基础类,现在我要实现的功能是,用list来存储Teacher和Student对象,且将List作为传输,如list的第一个节点存储的Teacher,第二个节点存放的是Student,第三个节点存放的是字符串“JiaLiDun University”,解析的时候只要顺序解析就能得到对应的类和字符串。请实现class CMyList(为通用的类,调用的时候传入别的类也能使用) 展开
2个回答
展开全部
#include <list>
#include <iostream>
using namespace std;
class CMyList
{
public:
template<typename T>
void push_back( T &t )
{
m_list.push_back( (int )&t);
}
template<typename T>
void pop_back(T &t)
{
t=*(T*)(m_list.back());
}
private:
list<int> m_list;
};
class A
{
public:
A() {
SayHello();
}
void SayHello() {
cout << "Hello, I am A" << endl;
}
private:
};
class B
{
public:
B() {
SayHello();
}
void SayHello() {
cout << "I am B"<<endl;
}
};
int main( int, char** )
{
CMyList mylist;
A a;
B b;
mylist.push_back( a );
mylist.push_back( b );
B bb;
mylist.pop_back(bb);
bb.SayHello();
A aa;
mylist.pop_back( aa );
aa.SayHello();
system( "pause" );
return 0;
}
花了几分钟写出来一个简单的CMyList通用类,你可以在此基础上修改。理论上可以放置任何类。支持所有C++平台哦!需要注意的是你存取的顺序要对,否则崩溃。如果你有兴趣的话可以看看tuple的实现,他可以放置任意类型的数据,而且类型安全。
展开全部
懒得写。。。
做个共有基类,比如:
class object
{
// 能提为共有的就提炼出来
};
使用基类保存就好了,反正子类型基类转化,直接转化就好了;
list<object*> test_list;
使用的话,只要你知道第几个具体是什么类,你转换回来就好了。
Student* student = dynamatic_cast<Student*>(test_list_iterator);
Teacher* teacher = dynamatic_cast<Teacher*>(test_list_iterator);
做个共有基类,比如:
class object
{
// 能提为共有的就提炼出来
};
使用基类保存就好了,反正子类型基类转化,直接转化就好了;
list<object*> test_list;
使用的话,只要你知道第几个具体是什么类,你转换回来就好了。
Student* student = dynamatic_cast<Student*>(test_list_iterator);
Teacher* teacher = dynamatic_cast<Teacher*>(test_list_iterator);
追问
求源码
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询