継承の応用
まず復習。いろいろ思い出そう。
#include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; class cAnimal { protected: string mName; public: cAnimal():mName(""){} cAnimal(string _name) :mName(_name) {}; void sayMyName() { cout << mName << endl; } }; class cDog :public cAnimal { public: cDog() : cAnimal(){} cDog(string _name) :cAnimal(_name) {} void sayWan() { cout << "BowWow" << endl; } }; int main() { cDog pet1("potchi"); pet1.sayMyName(); pet1.sayWan(); return 0; }
さらに継承
もう1個cAnimalを継承するクラスを追加してみる。
#include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; class cAnimal { protected: string mName; public: cAnimal():mName(""){} cAnimal(string _name) :mName(_name) {}; void sayMyName() { cout << mName << endl; } }; class cDog :public cAnimal { public: cDog() : cAnimal(){} cDog(string _name) :cAnimal(_name) {} void sayWan() { cout << "BowWow" << endl; } }; class cCat :public cAnimal { public: cCat() : cAnimal() {} cCat(string _name) :cAnimal(_name) {} void sayNyan() { cout << "Meow" << endl; } }; int main() { cDog pet1("potchi"); pet1.sayMyName(); pet1.sayWan(); cCat pet2("tama"); pet2.sayMyName(); pet2.sayNyan(); cAnimal* p[2]; p[0] = &pet1; p[1] = &pet2; p[0]->sayMyName(); //sayWan呼べない。。。。 return 0; }