【发布时间】:2018-05-30 00:56:32
【问题描述】:
这个问题跟进stackoverflow.com/q/2391679
virtual 函数的经典示例之一是
class Shape
{
public:
virtual string draw() = 0;
};
class Circle : public Shape
{
public:
string draw() { return "Round"; }
};
class Rectangle : public Shape
{
public:
string draw() { return "Flat"; }
};
void print (Shape& obj)
{
cout << obj.draw();
}
但是,我们可以在 C++ 14 中传递 auto 参数
class Circle
{
public:
string draw() { return "Round"; }
};
class Rectangle
{
public:
string draw() { return "Flat"; }
};
void print (auto& shape)
{
cout << shape.draw();
}
我们什么时候应该更喜欢virtual 函数或auto 参数?
由于早期绑定,后者更有效吗?
【问题讨论】:
-
@vu1p3n0x 这个问题不能重复;它根本没有提到
auto。 -
继承的(主要)目的是子类型化。没有其他子类型化功能。
标签: templates polymorphism c++14 virtual-functions auto