在没有指针/引用的情况下,多态是否可以在C ++中工作? [英] Does polymorphism work in C++ without pointers / references?
本文介绍了在没有指针/引用的情况下,多态是否可以在C ++中工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可能重复:
虚拟函数对象切片
Possible Duplicate:
Virtual Functions Object Slicing
让我们考虑一下:
#include <vector>
#include <iostream>
using namespace std;
struct A {
virtual void do_it() { cout << "A" << endl; }
};
struct B : public A {
virtual void do_it() { cout << "B" << endl; }
};
int main() {
vector<A> v;
v.push_back(B());
v[0].do_it(); // output is A
}
将调用哪个函数?基本上,如果不存在切片,是否可以在不使用指针的情况下使用多态性?
which function will be called? Basically is it possible to use polymorphism without pointers if no slicing is present?
推荐答案
否,没有指针将无法实现.
No it will not be possible without pointers.
由于创建了对象B
并将其推入包含A
的向量,它将被复制(发送到A
的复制构造函数),并且A
的实例将被添加到向量中. IE.该对象将被切片.
Since you create an object B
and push it to the vector containing A
, it will get copied (sent to the copy constructor of A
) and an instance of A
will be added to the vector. I.e. the object will be sliced.
给出以下代码:
struct A {
virtual void d() {
std::cout << "Hello A" << std::endl;
}
};
struct B : public A {
virtual void d() {
std::cout << "Hello B" << std::endl;
}
};
int main() {
std::vector<A> v;
v.push_back(B());
v[0].d();
}
输出将是:
Hello A
这篇关于在没有指针/引用的情况下,多态是否可以在C ++中工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文