条款12 override函数添加override

// 条款12 override函数添加override
class Base
{
public:
virtual void doWork(); // base class virtual function
};
class Derived : public Base
{
public:
virtual void doWork();
};
std::unique_ptr<Base> upb = std::make_unique<Derived>();
upb->doWork();
class Widget
{
public:
void doWork() &;
void doWork() &&;
};
Widget makeWidget(); // factory function (return rvalue)
Widget w; // normal object (lvalue)
w.doWork();
makeWidget().doWork();
void doSomething(Widget& w); // only lvalue
void doSomething(Widget&& w); // only rvalue
class Widget
{
public:
using DataType = std::vector<double>;
// DataType& data() { return values; }
DataType& data() & { return values; } // lvalue
DataType data() && { return std::move(values); } // rvalue
private:
DataType values;
};
Widget w;
// auto vals1 = w.data();
Widget makeWidget();
// auto vals2 = makeWidget().data();
auto vals1 = w.data(); // calls lvalue override for Widget::data, copy-constructor
auto vals2 = makeWidget().data(); // rvalue, move-ctor