我有一个Base类和一个Derived类;另一方面,我创建了一个使用STL的List类。基类有一个名为PrintData()
的虚函数,它打印一个属于Base类的整数。在Derived类中;相同的函数printData()
打印一个属于Derived的整数和另一个来自Base类的整数。
问题是,在类List中,我只是从Base获取数据,无论我是否在列表中插入了Derived实例。
我需要打印Derived数据,它也应该包含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;
}
我只是获取Base类数据,这是一个值为3的整数。 但我没有从Derived获得值为4的整数。
答案 0 :(得分:0)
替换
a<<getA()<<getX()<<endl;
与
a<<getA()<<" "<<getX()<<endl;
再次运行它。我怀疑你的代码确实打印了两个值,只是它掩盖了这个事实。可以这么说,新的线条剥夺了伪装。
顺便说一下,@ MarkRansom是对的。没有必要显式调用Base构造函数。 (事实上,当我尝试你的代码时,我的编译器甚至不会允许它。)
答案 1 :(得分:0)
我编译了你的代码,它导致了Derived
构造函数的编译错误。尝试将Derived
构造函数更改为
Derived() : Base()
{
a = 4;
}
我尝试了它,它可以正常工作。
注意:如果您要打印3和4,则应仅在Lista
Derived*
个对象上插入。