//: C14:Inheritance.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Simple inheritance
#include "Useful.h"
#include <iostream>
using namespace std;/* L'istruzione immediatamente sotto indica che stiamo definendo una classe derivata della classe "X" definita in "Useful.h".*/
class Y : public X
{
int i;
/* L'attributo sopra è diverso da quello definito nella classe "X", poiché quello della classe "X" è un attributo "private" e quindi non visibile alla classe derivate "Y".*/
/* Different from X's i */
public:
Y() { i = 0; }
int change()
{
i = permute();
/* Essendo "Y" una classe derivata da "X" posso richiamare il metodo "permute()" poiché grazie all'ereditarietà è come se tale metodo fosse definito nella classe "Y".*/
/* Different name call */
return i;}
void set(int ii)
{
i = ii;
X::set(ii);/* L'istruzione sopra richiama il metodo "set" della classe "X".*/
/* Same-name function call */}
};
int main()
{
cout << "sizeof(X) = " << sizeof(X) << endl;
cout << "sizeof(Y) = " << sizeof(Y) << endl;
Y D;
D.change();
/* X function interface comes through: */
D.read();
D.permute();
/* Redefined functions hide base versions: */
D.set(12);} ///:~