C++多态性及容器存放指针类型,虚函数,虚析构函数,迭代器的使用实例
代码如下,可以直接运行:
#include <iostream>
#include <list>
using namespace std;
class A
{
public:
A(){}
virtual ~A(){}
void setIndex(int index)
{
m_index = index;
}
int getIndex()
{
return m_index;
}
virtual void printIndex()
{
std::cout << "A:" << m_index << std::endl;
}
private:
int m_index;
};
class B : public A
{
public:
B(){}
~B(){}
void printIndex()
{
std::cout << "B:" << getIndex() << std::endl;
}
private:
int m_externIndex;
};
void transferParameter(const std::list<A *> &lstValue)
{
std::list<A *>::const_iterator it = lstValue.begin();
while (it != lstValue.end())
{
(*it)->printIndex();
++it;
}
}
void deleteList(std::list<A *> &lstValue)
{
std::list<A *>::iterator it = lstValue.begin();
while (it != lstValue.end())
{
A *p = *it;
delete p;
p = NULL;
++it;
}
lstValue.clear();
}
class Test
{
public:
Test(){}
void start()
{
std::cout << "---------------A---------------" << std::endl;
std::list<A *> lstValue;
for (int i = 0; i < 3; ++i)
{
A *p = new A;
p->setIndex(i);
lstValue.push_back(p);
}
transferParameter(lstValue);
deleteList(lstValue);
std::cout << "---------------B 1---------------" << std::endl;
lstValue.clear();
for (int i = 0; i < 3; ++i)
{
B *p = new B;
p->setIndex(i);
lstValue.push_back(p);
}
transferParameter(lstValue);
deleteList(lstValue);
std::cout << "---------------B 2---------------" << std::endl;
for (int i = 0; i < 3; ++i)
{
A *p = new B;
p->setIndex(i);
lstValue.push_back(p);
}
transferParameter(lstValue);
deleteList(lstValue);
}
};
int main()
{
Test test;
test.start();
return 0;
}
运行结果如下: