====== 継承の基本 その3 ======
===== アニマルクラス =====
==== cAnimal.h ====
#pragma once
#include
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
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
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
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
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
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
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
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 <<"犬種" <