- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个与此类似的代码(经过简化以帮助解决问题)
class a
{
protected:
int m_x;
public:
a(int x):m_x(x){};
~a(){};
virtual int GetX()=0;
}
class b:public a
{
public:
b(int x):a:(x){};
~b(){};
virtual int GetX(){return m_x+2;};
}
class c:public a
{
public:
c(int x):a:(x){};
~c(){};
virtual int GetX(){return m_x+4;};
}
我还有这些功能:
vector<a> GetData()
{
vector<a> data;
data.push_back(b(1));
data.push_back(c(1));
}
void printData()
{
vector<a> data=GetData();
for(int I=0;i<data.size();I++)
{
cout<< data[I].GetX()<<endl;
}
}
上面的程序并没有编译出带有虚函数的类不能被实例化的错误。
所以我把 a 改成了这个:
class a
{
protected:
int m_x;
public:
a(int x):m_x(x){};
~a(){};
virtual int GetX()={return m_x};
}
但是我并没有像我想的那样得到正确的结果,因为我创建了 b 和 c 类型的对象,然后当我调用 GetX 时,应该调用它们的函数而不是 a。所以我得到了这些数据:
1
1
代替
3
5
我该如何解决这个问题?
我应该打开编译器中的任何开关来让它工作吗?
我使用的是 visual studio 2012。
最佳答案
您需要使用指针 vector 。幸运的是,由于您使用的是 VS2012,因此您拥有现代智能指针(以及其他一些 C++11 优点):
typedef std::vector<std::unique_ptr<a>> DataVector;
DataVector GetData() {
DataVector data;
data.push_back(std::unique_ptr<b>(new b(1)));
data.push_back(std::unique_ptr<c>(new c(1)));
return data;
}
void PrintData() {
for(const auto & datum : GetData())
std::cout << datum->GetX() << std::endl;
}
关于c++ - 运行时类型信息(为什么这段代码不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638025/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!