correct polymorphism & add simple operator overloading