• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

tests/testClassStructure.cpp

00001 #include <assert.h>
00002 #include <stdio.h>
00003 #include <tr1/memory>
00004 
00005 /* This file documents how base and derived frames and sensors work by
00006  * providing a small model of it. */
00007 
00008 class _BaseFrame {
00009 public:
00010     _BaseFrame() {foo = 1;}
00011     int foo;
00012 };
00013 
00014 
00015 class BaseFrame {
00016 public:
00017     BaseFrame(_BaseFrame *f) : ptr(f) {}
00018     // Access to the base class functionality
00019     int foo() {return get()->foo;}
00020 protected:
00021     std::tr1::shared_ptr<_BaseFrame> ptr;
00022 private:
00023     _BaseFrame *get() {return ptr.get();}
00024 };
00025 
00026 class BaseSensor {
00027 public:
00028     BaseFrame getFrame() {return getBaseFrame();}
00029 protected:
00030     virtual BaseFrame getBaseFrame() = 0;
00031 };
00032 
00033 class _DerivedFrame : public _BaseFrame {
00034 public:
00035     _DerivedFrame() {foo=2; panda=17;}
00036 
00037     // something completely new
00038     unsigned panda;
00039 };
00040 
00041 class DerivedFrame : public BaseFrame {
00042 public:
00043     DerivedFrame(_DerivedFrame *f) : BaseFrame(f) {}
00044     // Access to the derived class functionality
00045     unsigned panda() {return get()->panda;}
00046 private:
00047     _DerivedFrame *get() {return (_DerivedFrame *)ptr.get();}
00048 };
00049 
00050 class DerivedSensor : public BaseSensor {
00051 public:
00052     DerivedFrame getFrame() {
00053         return DerivedFrame(new _DerivedFrame());
00054     }
00055 protected:
00056     virtual BaseFrame getBaseFrame() {
00057         return BaseFrame(getFrame());
00058     }
00059 };
00060 
00061 
00062 int main(int argc, char **argv) {
00063     printf("%d %d\n", sizeof(BaseFrame), sizeof(DerivedFrame));
00064 
00065     DerivedSensor ds;
00066     DerivedFrame df = ds.getFrame();
00067     printf("%d\n", df.foo());
00068 
00069     printf("%d\n", df.panda());
00070 
00071     BaseFrame bf = ds.getFrame();
00072     printf("%d\n", bf.foo());
00073 
00074     BaseSensor &bs = ds;
00075     bf = bs.getFrame();
00076     printf("%d\n", bf.foo());
00077     
00078     return 0;
00079 };

Generated on Fri Sep 24 2010 15:53:00 for FCam by  doxygen 1.7.1