條款12 override函數(shù)添加override

// 條款12 override函數(shù)添加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