継承の応用

まず復習。いろいろ思い出そう。

#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;
}