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;}