diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index fa3e088553000b0c7db961f1adbea0d502974aba..549744a8a6122d690cc2e7532b80ce8ca2e7a12f 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -1,6 +1,6 @@ # C++ Core Guidelines -March 11, 2021 +June 17, 2021 Editors: @@ -6941,7 +6941,7 @@ Class hierarchy rule summary: Designing rules for classes in a hierarchy summary: -* [C.126: An abstract class typically doesn't need a constructor](#Rh-abstract-ctor) +* [C.126: An abstract class typically doesn't need a user-written constructor](#Rh-abstract-ctor) * [C.127: A class with a virtual function should have a virtual or protected destructor](#Rh-dtor) * [C.128: Virtual functions should specify exactly one of `virtual`, `override`, or `final`](#Rh-override) * [C.129: When designing a class hierarchy, distinguish between implementation inheritance and interface inheritance](#Rh-kind) @@ -7114,7 +7114,7 @@ Furthermore, we can update `D1` and `D2` in ways that are not binary compatible ## C.hierclass: Designing classes in a hierarchy: -### C.126: An abstract class typically doesn't need a constructor +### C.126: An abstract class typically doesn't need a user-written constructor ##### Reason @@ -7122,7 +7122,20 @@ An abstract class typically does not have any data for a constructor to initiali ##### Example - ??? + class Shape { + public: + // no user-written constructor needed in abstract base class + virtual Point center() const =0; // pure virtual + virtual void move(Point to) =0; + // ... more pure virtual functions... + virtual ~Shape() {} // destructor + }; + + class Circle : public Shape { + public: + Circle(Point p, int rad); // constructor in derived class + Point center() const override { return x; } + }; ##### Exception