0

我有一个基类和一个派生类;另一方面,我制作了一个使用 STL 的 List 类。基类有一个名为 的虚函数PrintData(),它打印一个属于基类的整数。在派生类中;同一个函数printData()打印一个属于 Derived 的整数和另一个来自 Base 类的整数。

问题是,在 List 类中,我只是从 Base 获取数据,无论我是否在列表中插入了 Derived 实例。

我需要打印派生数据,也应该有基础数据。这是代码:

 #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 的整数。

4

2 回答 2

0

代替

    a<<getA()<<getX()<<endl;

    a<<getA()<<" "<<getX()<<endl;

并再次运行它。我怀疑您的代码确实打印了这两个值,只是它掩盖了事实。可以这么说,新线剥去了伪装。

顺便说一句,@MarkRansom 是对的。没有必要显式调用 Base 构造函数。(事实上​​,当我尝试你的代码时,我的编译器甚至不允许它。)

于 2012-06-05T22:27:13.270 回答
0

我编译了您的代码代码,它在Derived构造函数中导致编译错误。尝试将Derived构造函数更改为

Derived() : Base()
{
    a = 4;
}

我试过了,它可以正常工作。

注意:如果您想同时打印 3 和 4,您应该插入Lista唯一的Derived*对象。

于 2012-06-06T17:50:20.410 回答