C++打印 STL 列表上的数据

C++ Printing Data on a STL list

本文关键字:数据 列表 打印 STL C++      更新时间:2023-10-16

我有一个基类和一个派生类;另一方面,我创建了一个使用 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*