C++打印 STL 列表上的数据
C++ Printing Data on a STL list
我有一个基类和一个派生类;另一方面,我创建了一个使用 STL 的 List 类。基类有一个名为 PrintData()
的虚函数,它打印属于基类的整数。在派生类中;同一函数printData()
打印一个属于 Derived 的整数和另一个来自 Base 类的整数。
问题是,在类列表中,我只是从 Base 获取数据,无论我是否在列表中插入了派生实例。
我需要打印派生数据,这也应该有基础数据。这是代码:
#pragma once;
#include <iostream>
#include <sstream>
using namespace std;
class Base{
protected:
int x;
public:
Base(){
x=3;
}
void setX(int a){
x=a;
}
int getX(){
return x;
}
virtual string printData(){
stringstream f;
f<<getX()<<endl;
return f.str();
}
};
class Derived : public Base{
int a;
public:
Derived(){
this->Base::Base();
a=4;
}
void setA(int x){
a=x;
}
int getA(){
return a;
}
string printData(){
stringstream a;
a<<getA()<<getX()<<endl;
return a.str();
}
};
下面是 List 类:
#pragma once;
#include "Prueba.cpp"
#include <list>
class Lista{
list<Base*> lp;
public:
Lista(){
}
void pushFront(Base* c){
lp.push_front(c);
}
void pushBack(Base* c){
lp.push_back(c);
}
void printList(){
list<Base*>::const_iterator itr;
for(itr=lp.begin(); itr!=lp.end(); itr++){
cout<<(*itr)->printData();
}
}
~Lista(){
}
};
int main(){
Derived* d=new Derived();
Lista* l=new Lista();
l->pushFront(d);
l->printList();
system("Pause");
return 0;
}
我只是在获取基类数据,即值为 3 的整数。但是我没有从 Derived 中获取值为 4 的整数。
替换
a<<getA()<<getX()<<endl;
跟
a<<getA()<<" "<<getX()<<endl;
并再次运行它。 我怀疑您的代码确实打印了这两个值,只是它掩盖了事实。 可以这么说,新线剥离了伪装。
顺便说一句,@MarkRansom是对的。 不必显式调用 Base 构造函数。 (事实上,当我尝试你的代码时,我的编译器甚至不允许它。
我编译了您的代码,它会导致Derived
构造函数的编译错误。尝试将Derived
构造函数更改为
Derived() : Base()
{
a = 4;
}
我试过了,它应该工作。
注意:如果要同时打印 3 和 4,则应仅在Lista
处插入对象Derived*
。
相关文章:
- c ++数据输入并读回列表中的结构结构中的数组
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- 使用初始化列表时如何获取私有数据?
- 从异构列表中提取数据
- C++ 中带有列表的树数据结构
- C++多种数据类型的列表.遗产
- 尝试创建排序的动态列表(数据结构)
- 如何制作一个结构程序,在其中可以存储无限量的数据,以便每次您想要时都可以将另一个产品添加到列表中?
- 链接列表(C )中(字符串)数据的用户输入
- 在数据类型类的列表中查找 elem
- 如何编写循环以通过列表迭代并打印列表中每个元素的数据的数据
- 存储数据列表并自动分配给结构的最佳方法是什么
- 实现双链接列表,其中数据存储在堆上
- QML自定义列表数据类型
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 列表视图最初不显示数据
- 这个无锁数据列表插入是安全的吗
- 如何从 for 循环创建计算数据列表
- c++中比较两个大数据列表的有效算法是什么?