Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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.
- main.cpp
- TypeCheckedOBJ *testcheck(new TypeCheckedOne());
- TypeCheckedOBJ *testcheck2(new TypeCheckedTwo());
- TypeCheckedOne *testcheck3(new TypeCheckedOne());
- TypeCheckedTwo *testcheck4(new TypeCheckedTwo());
- vector<TypeCheckedOBJ*> objlist;
- objlist.push_back(new TypeCheckedOne());
- objlist.push_back(new TypeCheckedOne());
- objlist.push_back(new TypeCheckedOne());
- objlist.push_back(new TypeCheckedTwo());
- objlist.push_back(new TypeCheckedTwo());
- objlist.push_back(new TypeCheckedTwo());
- TypeChecked.h
- class TypeCheckedOBJ
- {
- public:
- explicit TypeCheckedOBJ(std::string = "", int = 0, int = 0, int = 0, int = 0);
- virtual ~TypeCheckedOBJ();
- int getLocX() const;
- void setLocX(int);
- int getLocY() const;
- void setLocY(int);
- int getVecX() const;
- void setVecX(int);
- int getVecY() const;
- void setVecY(int);
- std::string getName() const;
- void setName(std::string);
- bool operator ==(const TypeCheckedOBJ &)const;
- bool operator !=(const TypeCheckedOBJ &rightside)const
- {
- return !(*this == rightside);
- }
- virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const = 0;
- virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const = 0;
- virtual bool myEquals(const TypeCheckedOBJ &, const TypeCheckedOBJ &) const = 0;
- virtual bool myEquals(const TypeCheckedOBJ *, const TypeCheckedOBJ *) const = 0;
- private:
- int locx, locy, vecx, vecy;
- std::string name;
- };
- TypeChecked.cpp
- TypeCheckedOBJ::TypeCheckedOBJ(std::string n, int lx, int ly, int vx, int vy)
- : name(n), locx(lx), locy(ly), vecx(vx), vecy(vy)
- {
- }
- TypeCheckedOBJ::~TypeCheckedOBJ()
- {
- }
- int TypeCheckedOBJ::getLocX() const
- {
- return locx;
- }
- void TypeCheckedOBJ::setLocX(int xl)
- {
- locx = xl;
- }
- int TypeCheckedOBJ::getLocY() const
- {
- return locy;
- }
- void TypeCheckedOBJ::setLocY(int ly)
- {
- locy = ly;
- }
- int TypeCheckedOBJ::getVecX() const
- {
- return vecx;
- }
- void TypeCheckedOBJ::setVecX(int vx)
- {
- vecx = vx;
- }
- int TypeCheckedOBJ::getVecY() const
- {
- return vecy;
- }
- void TypeCheckedOBJ::setVecY(int vy)
- {
- vecy = vy;
- }
- std::string TypeCheckedOBJ::getName() const
- {
- return name;
- }
- void TypeCheckedOBJ::setName(std::string n)
- {
- name = n;
- }
- bool TypeCheckedOBJ::operator ==(const TypeCheckedOBJ &rightside)const
- {
- return (typeid(*this) == typeid(rightside));
- }
- TypeCheckedOne.h
- class TypeCheckedOne :
- public TypeCheckedOBJ
- {
- public:
- explicit TypeCheckedOne(std::string = "", int = 0, int = 0, int = 0, int = 0);
- virtual ~TypeCheckedOne();
- bool operator ==(const TypeCheckedOne &)const;
- bool operator !=(const TypeCheckedOne &rightside)const
- {
- return !(*this == rightside);
- }
- virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const;
- virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const;
- virtual bool myEquals(const TypeCheckedOBJ &,const TypeCheckedOBJ &) const;
- virtual bool myEquals(const TypeCheckedOBJ *,const TypeCheckedOBJ *) const;
- };
- TypeCheckedOne.cpp
- TypeCheckedOne::TypeCheckedOne(std::string n, int lx, int ly, int vx, int vy) :TypeCheckedOBJ(n + "_LeftBranch", lx, ly, vx, vy)
- {
- }
- TypeCheckedOne::~TypeCheckedOne()
- {
- }
- bool TypeCheckedOne::operator ==(const TypeCheckedOne &rightside)const
- {
- //return (typeid(*this) == typeid(rightside));
- return myEquals(*this, rightside);
- }
- bool TypeCheckedOne::myEquals( TypeCheckedOBJ &left, TypeCheckedOBJ &right) const
- {
- TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
- return myEquals(leftptr,rightptr);
- }
- bool TypeCheckedOne::myEquals(TypeCheckedOBJ *left, TypeCheckedOBJ *right) const
- {
- return dynamic_cast<TypeCheckedOne*>(left) && dynamic_cast<TypeCheckedOne*>(right);
- }
- bool TypeCheckedOne::myEquals(const TypeCheckedOBJ &left, const TypeCheckedOBJ &right) const
- {
- const TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
- return myEquals(leftptr, rightptr);
- }
- bool TypeCheckedOne::myEquals(const TypeCheckedOBJ *left, const TypeCheckedOBJ *right) const
- {
- return dynamic_cast<const TypeCheckedOne*>(left) && dynamic_cast<const TypeCheckedOne*>(right);
- }
- TypeCheckedTwo.h
- class TypeCheckedTwo :
- public TypeCheckedOBJ
- {
- public:
- TypeCheckedTwo(std::string = "", int = 0, int = 0, int = 0, int = 0);
- virtual ~TypeCheckedTwo();
- bool operator ==(const TypeCheckedTwo &)const;
- bool operator !=(const TypeCheckedTwo &rightside)const
- {
- return !(*this == rightside);
- }
- virtual bool myEquals(TypeCheckedOBJ &, TypeCheckedOBJ &) const;
- virtual bool myEquals(TypeCheckedOBJ *, TypeCheckedOBJ *) const;
- virtual bool myEquals(const TypeCheckedOBJ &, const TypeCheckedOBJ &) const;
- virtual bool myEquals(const TypeCheckedOBJ *, const TypeCheckedOBJ *) const;
- };
- TypeCheckedTwo.cpp
- TypeCheckedTwo::TypeCheckedTwo(std::string n, int lx, int ly, int vx, int vy) :TypeCheckedOBJ(n + "_RightBranch", lx, ly, vx, vy)
- {
- }
- TypeCheckedTwo::~TypeCheckedTwo()
- {
- }
- bool TypeCheckedTwo::operator ==(const TypeCheckedTwo &rightside)const
- {
- //return (typeid(*this) == typeid(rightside));
- return myEquals(*this, rightside);
- }
- bool TypeCheckedTwo::myEquals(TypeCheckedOBJ &left, TypeCheckedOBJ &right) const
- {
- TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
- return myEquals(leftptr, rightptr);
- }
- bool TypeCheckedTwo::myEquals(TypeCheckedOBJ *left, TypeCheckedOBJ *right) const
- {
- return dynamic_cast<TypeCheckedTwo*>(left) && dynamic_cast<TypeCheckedTwo*>(right);
- }
- bool TypeCheckedTwo::myEquals(const TypeCheckedOBJ &left, const TypeCheckedOBJ &right) const
- {
- const TypeCheckedOBJ *leftptr = &left, *rightptr = &right;
- return myEquals(leftptr, rightptr);
- }
- bool TypeCheckedTwo::myEquals(const TypeCheckedOBJ *left, const TypeCheckedOBJ *right) const
- {
- return dynamic_cast<const TypeCheckedTwo*>(left) && dynamic_cast<const TypeCheckedTwo*>(right);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement