C++ 矢量显示错误

C++ 矢量显示错误,c++,vector,C++,Vector,我有两个简单的课程。我想用矢量显示结果,但数字没有显示。另一方面,当我尝试不带向量的结果时,结果将显示出来。你能帮助我吗?多谢各位 #include <iostream> #include <string> #include <vector> #include <iterator> using namespace std; template<typename T> class One { protected: T word

我有两个简单的课程。我想用矢量显示结果,但数字没有显示。另一方面,当我尝试不带向量的结果时,结果将显示出来。你能帮助我吗?多谢各位

#include <iostream>
#include <string>
#include <vector>
#include <iterator>

using namespace std;


template<typename T>
class One
{
protected:
    T word;
    T word2;

public:
    One() {word = "0"; word2 = "0";}
    One(T w, T w2) {word = w; word2 = w2;}
    virtual const void Show() {cout << word << endl; cout << word2 << endl;}
};

template<typename T>
class Two : public One<T>
{
private:
    int number;
public:
    Two() {number = 0;}
    Two(T w, T w2, int n) : One(w,w2) {number = n;}
    virtual const void Show () {cout << word << endl; cout << word2 << endl; cout << number << endl; }
};


int main ()
{
    One<string> *idk;
    Two<string> *something = new Two<string>("asd","aa",1);
    idk = something;

    idk->Show(); // OK - asd, aa, 1

    vector<One<string>> arr;
    arr.push_back(*idk); 
    arr.at(0).Show(); // WRONG - asd,aa
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
模板
一班
{
受保护的:
T字;
T字2;
公众:
一个({word=“0”word2=“0”}
一(tw,tw2){word=w;word2=w2;}
virtual const void Show(){cout您正在存储一个
One
实例,而不是指向它们的
One*

由于对象完全存储在向量单元中,因此对象不存在多态性:在向量中放置的实例中,从
One
继承的任何附加功能都将被丢弃

尝试使用
向量
,这样就可以存储指针,而不会出现问题。请注意,要管理内存,在处理STL集合时使用是一个明智的选择。

您正在存储
一个
实例,而不是指向它们的指针
一个*

由于对象完全存储在向量单元中,因此对象不存在多态性:在向量中放置的实例中,从
One
继承的任何附加功能都将被丢弃


尝试使用
向量
,这样就可以存储指针,而不会出现问题。请注意,要管理内存,在使用STL集合时使用是一个明智的选择。

你的向量存储
一个对象。当你
推回(*idk)时
,通过复制构造函数从
*idk
创建一个新的
One
对象


如果你想保持虚拟行为,你应该使用一个指针向量:
vector arr;
,然后
arr.push_-back(idk);
你的向量存储
一个
对象。当你
push_-back(*idk)
时,一个新的
One
对象通过
*idk
的复制构造函数创建

如果你想保持虚拟行为,你应该使用一个指针向量:
vector arr;
,然后
arr.push_-back(idk);
:One(w,w2){number=n;}
我认为应该是
:One(w,w2){number=n;}
:One(w,w2){number=n;}
我认为应该是
:One(w,w2){number=n;}