All pastes #1322550 Raw Edit

const-inheritance concept

public cpp v1 · immutable
#1322550 ·published 2009-01-30 06:24 UTC
rendered paste body
/* No inheritance */#include <stdio.h>class Rectangle{protected:    int width;    int height;public:    Rectangle() : width(0), height(0) {}    Rectangle(int w, int h) : width(w), height(h) {}    int GetWidth() const { return width; }    int GetHeight() const { return height; }    int SetWidth(int w) { return (width = w); }    int SetHeight(int h) { return (height = h); }};class Square{protected:    int side;public:    Square(): side(0) {}    Square(int s) : side(s) {}    int GetSide() const { return side; }    int SetSide(int s) { return (side = s); }    operator Rectangle() const { return Rectangle(side, side); }};void alterRectangle(Rectangle& rect){    rect.SetWidth(8);    rect.SetWidth(10);}void dumpRectangle(const Rectangle& rect){    printf("%d x %d", rect.GetWidth(), rect.GetHeight());}int main(){    Square sq(7);    alterRectangle(sq); // illegal (temporary can't be used as a reference)    dumpRectangle(sq); // legal (implicit cast)    return 0;}/* "const-inheritance" concept */#include <stdio.h>class Rectangle{protected:    int width;    int height;public:    Rectangle() : width(0), height(0) {}    Rectangle(int w, int h) : width(w), height(h) {}    int GetWidth() const { return width; }    int GetHeight() const { return height; }    int SetWidth(int w) { return (width = w); }    int SetHeight(int h) { return (height = h); }};class Square : public const Rectangle{public:    Square() : Rectangle() {}    Square(int s) : Rectangle(s, s) {}    int GetSide() const { return width; }    int SetSide(int s) { return (width = height = s); }};void alterRectangle(Rectangle& rect){    rect.SetWidth(8);    rect.SetWidth(10);}void dumpRectangle(const Rectangle& rect){    printf("%d x %d", rect.GetWidth(), rect.GetHeight());}int main(){    Square sq(7);    alterRectangle(sq); // illegal (argument isn't const)    dumpRectangle(sq); // legal (Square inherits from Rectangle)    return 0;}