継承の基本 その3

アニマルクラス

cAnimal.h

#pragma once
#include <string>
using namespace std;
 
 
class cAnimal
{
//private://自クラスの中だけで読み書きできる
protected:
	string mName;//メンバ変数
public://自クラス内外から読み書きできる
	//コンストラクタ
	cAnimal();
	cAnimal(string _name);
	//ゲッターセッター
	string getName();
	void setName(string _name);
	//動物の基本機能
	void sleep();
	void eat();
	void getup();
};

cAnimal.cpp

#include "cAnimal.h"
#include <iostream>
 
using namespace std;
 
cAnimal::cAnimal()
{
	mName = "";
}
cAnimal::cAnimal(string _name)
	:mName(_name)
{
 
}
string cAnimal::getName()
{
	return mName;
}
void cAnimal::setName(string _name)
{
	mName = _name;
}
void cAnimal::sleep()
{
	cout << this->mName 
		<< "は寝ます。ぐーぐー" << endl;
}
void cAnimal::eat()
{
	cout << this->mName
		<< "は食べます。もぐもぐ" << endl;
}
void cAnimal::getup()
{
	cout << this->mName
		<< "は起きた!ぱちっ" << endl;
}

犬クラス

cDog.h

#pragma once
#include "cAnimal.h"
#include <string>
class cDog :
    public cAnimal
{
private:
    //犬種
    string breedname;
public:
    // cDog(string _name) { this->setName(_name); }
    cDog() :cAnimal() {}
    cDog(string _name) { mName = _name; }
    // mName = _name;
    void setBreedName(string _bname);
    string getBreedName();
    void bark();//bark動物が吠える
};

cDog.cpp

#include "cDog.h"
#include <iostream>
 
using std::cout;
using std::endl;
 
 
void cDog::bark()
{
	cout << "わんわん!" << endl;
}
 
void cDog::setBreedName(string _bname)
{
	breedname = _bname;
}
string cDog::getBreedName()
{
	return(breedname);
}

鳥クラス

cBird.h

#pragma once
#include "cAnimal.h"
#include <string>
using std::string;
 
class cBird :
    public cAnimal
{
private:
    string birdname;
public:
    cBird(string _name, string _birdname);
    cBird(string _name) :cAnimal(_name){}
    cBird();
    void setBrirdName(string _bname) { birdname = _bname; }
    string getBrirdName() { return birdname; }
    void fly();
};

cBird.cpp

#include "cBird.h"
#include <iostream>
using std::cout;
using std::endl;
 
cBird::cBird()
	:cAnimal()
{
}
cBird::cBird(string _name, string _birdname)
	:cAnimal(_name),birdname(_birdname)
{
}
 
void cBird::fly()
{
	cout << "パタパタ" << endl;
}

キメラクラス

cChimera.h

#pragma once
#include "cDog.h"
#include "cBird.h"
 
using std::string;
 
class cChimera :
    public cDog, public cBird
{
private:
    string  mRaceName;//種族名
public:
    cChimera() :cDog(), cBird() {}
    cChimera(string _cname, string _dname, string _bname);
    //_cname :種族名
    //_dname :犬だった時の飼い主につけられた名前
    //_bname :鳥だった時の飼い主につけられた名前
    //cDogとcBirdとcChimeraに必要な引数を受け取って
    //3つのクラスのメンバ変数を初期化する!
};

キメラクラス

cChimera.h

#include "cChimera.h"
#include <iostream>
using std::cout;
using std::endl;
 
//_cname :種族名
//_dname :犬だった時の飼い主につけられた名前
//_bname :鳥だった時の飼い主につけられた名前
cChimera::cChimera(string _cname, string _dname, string _bname)
	:cDog(_dname),cBird(_bname),mRaceName(_cname)
{
	cout << _dname << "と" << _bname
		<< "から" << _cname << "が誕生した" << endl;
}

theMain.cpp

#include "cAnimal.h"
#include "cDog.h"
#include "cBird.h"
#include "cChimera.h"
#include <iostream>
 
using std::cout;
using std::endl;
 
int main()
{
	//cAnimal ani("pochi");
	//ani.mName = "ジョン";
	//cout << ani.getName() << endl;
	//ani.eat();
	//ani.sleep();
 
	//犬クラスと鳥クラスを継承で作るサンプル
	//cDog john("ジョン");
	////john.setName("ジョン");
	//cout << john.getName() << endl;
	//john.setBreedName("ボルゾイ");
	//cout <<"犬種" <<john.getBreedName()<<
	//	"の" << john.getName()<< "が吠えました";
	//john.bark();
 
	//cBird pico("ピーコ", "ルリコンゴウインコ");
	//cout << pico.getName() << endl;
	//cout << "鳥種" << pico.getBrirdName() <<
	//	"の" << pico.getName() << "が飛びました";
	//pico.fly();
 
	cChimera kero("グリフィン","ジョン", "ピーコ" );
	kero.bark();
	kero.fly();
	kero.
 
}