Advertisement
StormWingDelta

Counting Objects Of A Type In a Vector

Feb 28th, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.02 KB | None | 0 0
  1. Wrap yours heads around this one.  Was trying to find a way to make std::count work with objects.  Now it works fine if you don't have any sub classes but fails to hell if you do.  If anyone can solve this mystery you'll know how to find me.
  2. main.cpp
  3.  
  4.     TypeCheckedOBJ *testcheck(new TypeCheckedOne());
  5.     TypeCheckedOBJ *testcheck2(new TypeCheckedTwo());
  6.     TypeCheckedOne *testcheck3(new TypeCheckedOne());
  7.     TypeCheckedTwo *testcheck4(new TypeCheckedTwo());
  8.  
  9.  
  10.     vector<TypeCheckedOBJ*> objlist;
  11.     objlist.push_back(new TypeCheckedOne());
  12.     objlist.push_back(new TypeCheckedOne());
  13.     objlist.push_back(new TypeCheckedOne());
  14.  
  15.     objlist.push_back(new TypeCheckedTwo());
  16.     objlist.push_back(new TypeCheckedTwo());
  17.     objlist.push_back(new TypeCheckedTwo());
  18.  
  19. TypeChecked.h
  20.  
  21. class TypeCheckedOBJ
  22. {
  23. public:
  24.     explicit TypeCheckedOBJ(std::string = "", int = 0, int = 0, int = 0, int = 0);
  25.     virtual ~TypeCheckedOBJ();
  26.  
  27.     int getLocX() const;
  28.     void setLocX(int);
  29.  
  30.     int getLocY() const;
  31.     void setLocY(int);
  32.  
  33.     int getVecX() const;
  34.     void setVecX(int);
  35.  
  36.     int getVecY() const;
  37.     void setVecY(int);
  38.  
  39.     std::string getName() const;
  40.     void setName(std::string);
  41.  
  42.    
  43.     bool operator ==(const TypeCheckedOBJ &)const;
  44.     bool operator !=(const TypeCheckedOBJ &rightside)const
  45.     {
  46.         return !(*this == rightside);
  47.     }
  48.    
  49.  
  50.     virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const = 0;
  51.     virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const = 0;
  52.     virtual bool myEquals(const TypeCheckedOBJ &, const TypeCheckedOBJ &) const = 0;
  53.     virtual bool myEquals(const TypeCheckedOBJ *, const TypeCheckedOBJ *) const = 0;
  54.  
  55. private:
  56.     int locx, locy, vecx, vecy;
  57.     std::string name;
  58.  
  59. };
  60.  
  61. TypeChecked.cpp
  62.  
  63. TypeCheckedOBJ::TypeCheckedOBJ(std::string n, int lx, int ly, int vx, int vy)
  64.     : name(n), locx(lx), locy(ly), vecx(vx), vecy(vy)
  65. {
  66. }
  67.  
  68.  
  69. TypeCheckedOBJ::~TypeCheckedOBJ()
  70. {
  71. }
  72.  
  73. int TypeCheckedOBJ::getLocX() const
  74. {
  75.     return locx;
  76. }
  77. void TypeCheckedOBJ::setLocX(int xl)
  78. {
  79.     locx = xl;
  80. }
  81.  
  82. int TypeCheckedOBJ::getLocY() const
  83. {
  84.     return locy;
  85. }
  86. void TypeCheckedOBJ::setLocY(int ly)
  87. {
  88.     locy = ly;
  89. }
  90.  
  91. int TypeCheckedOBJ::getVecX() const
  92. {
  93.     return vecx;
  94. }
  95. void TypeCheckedOBJ::setVecX(int vx)
  96. {
  97.     vecx = vx;
  98. }
  99.  
  100. int TypeCheckedOBJ::getVecY() const
  101. {
  102.     return vecy;
  103. }
  104. void TypeCheckedOBJ::setVecY(int vy)
  105. {
  106.     vecy = vy;
  107. }
  108.  
  109. std::string TypeCheckedOBJ::getName() const
  110. {
  111.     return name;
  112. }
  113. void TypeCheckedOBJ::setName(std::string n)
  114. {
  115.     name = n;
  116. }
  117.  
  118.  
  119. bool TypeCheckedOBJ::operator ==(const TypeCheckedOBJ &rightside)const
  120. {
  121.     return (typeid(*this) == typeid(rightside));
  122. }
  123.  
  124. TypeCheckedOne.h
  125. class TypeCheckedOne :
  126.     public TypeCheckedOBJ
  127. {
  128. public:
  129.     explicit TypeCheckedOne(std::string = "", int = 0, int = 0, int = 0, int = 0);
  130.     virtual ~TypeCheckedOne();
  131.  
  132.     bool operator ==(const TypeCheckedOne &)const;
  133.     bool operator !=(const TypeCheckedOne &rightside)const
  134.     {
  135.         return !(*this == rightside);
  136.     }
  137.     virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const;
  138.     virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const;
  139.     virtual bool myEquals(const TypeCheckedOBJ &,const TypeCheckedOBJ &) const;
  140.     virtual bool myEquals(const TypeCheckedOBJ *,const TypeCheckedOBJ *) const;
  141.  
  142. };
  143.  
  144. TypeCheckedOne.cpp
  145. TypeCheckedOne::TypeCheckedOne(std::string n, int lx, int ly, int vx, int vy) :TypeCheckedOBJ(n + "_LeftBranch", lx, ly, vx, vy)
  146. {
  147. }
  148.  
  149.  
  150. TypeCheckedOne::~TypeCheckedOne()
  151. {
  152. }
  153.  
  154. bool TypeCheckedOne::operator ==(const TypeCheckedOne &rightside)const
  155. {
  156.     //return (typeid(*this) == typeid(rightside));
  157.    
  158.     return myEquals(*this, rightside);
  159. }
  160.  
  161. bool TypeCheckedOne::myEquals( TypeCheckedOBJ &left, TypeCheckedOBJ &right) const
  162. {
  163.     TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
  164.    
  165.     return myEquals(leftptr,rightptr);
  166. }
  167. bool TypeCheckedOne::myEquals(TypeCheckedOBJ *left, TypeCheckedOBJ *right) const
  168. {
  169.     return dynamic_cast<TypeCheckedOne*>(left) && dynamic_cast<TypeCheckedOne*>(right);
  170. }
  171.  
  172. bool TypeCheckedOne::myEquals(const TypeCheckedOBJ &left, const TypeCheckedOBJ &right) const
  173. {
  174.     const TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
  175.  
  176.     return myEquals(leftptr, rightptr);
  177. }
  178. bool TypeCheckedOne::myEquals(const TypeCheckedOBJ *left, const TypeCheckedOBJ *right) const
  179. {
  180.     return dynamic_cast<const TypeCheckedOne*>(left) && dynamic_cast<const TypeCheckedOne*>(right);
  181. }
  182.  
  183. TypeCheckedTwo.h
  184. class TypeCheckedTwo :
  185.     public TypeCheckedOBJ
  186. {
  187. public:
  188.     TypeCheckedTwo(std::string = "", int = 0, int = 0, int = 0, int = 0);
  189.     virtual ~TypeCheckedTwo();
  190.  
  191.     bool operator ==(const TypeCheckedTwo &)const;
  192.     bool operator !=(const TypeCheckedTwo &rightside)const
  193.     {
  194.         return !(*this == rightside);
  195.     }
  196.  
  197.     virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const;
  198.     virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const;
  199.     virtual bool myEquals(const TypeCheckedOBJ &, const TypeCheckedOBJ &) const;
  200.     virtual bool myEquals(const TypeCheckedOBJ *, const TypeCheckedOBJ *) const;
  201.  
  202. };
  203.  
  204. TypeCheckedTwo.cpp
  205. TypeCheckedTwo::TypeCheckedTwo(std::string n, int lx, int ly, int vx, int vy) :TypeCheckedOBJ(n + "_RightBranch", lx, ly, vx, vy)
  206. {
  207. }
  208.  
  209.  
  210. TypeCheckedTwo::~TypeCheckedTwo()
  211. {
  212. }
  213.  
  214. bool TypeCheckedTwo::operator ==(const TypeCheckedTwo &rightside)const
  215. {
  216.     //return (typeid(*this) == typeid(rightside));
  217.     return myEquals(*this, rightside);
  218. }
  219.  
  220. bool TypeCheckedTwo::myEquals(TypeCheckedOBJ &left, TypeCheckedOBJ &right) const
  221. {
  222.     TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
  223.  
  224.     return myEquals(leftptr, rightptr);
  225. }
  226. bool TypeCheckedTwo::myEquals(TypeCheckedOBJ *left, TypeCheckedOBJ *right) const
  227. {
  228.     return dynamic_cast<TypeCheckedTwo*>(left) && dynamic_cast<TypeCheckedTwo*>(right);
  229. }
  230.  
  231. bool TypeCheckedTwo::myEquals(const TypeCheckedOBJ &left, const TypeCheckedOBJ &right) const
  232. {
  233.     const TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
  234.  
  235.     return myEquals(leftptr, rightptr);
  236. }
  237. bool TypeCheckedTwo::myEquals(const TypeCheckedOBJ *left, const TypeCheckedOBJ *right) const
  238. {
  239.     return dynamic_cast<const TypeCheckedTwo*>(left) && dynamic_cast<const TypeCheckedTwo*>(right);
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement