継承を使用します。いくつかの仮想メソッドも必要になる場合があります。
class Settlement
{
public:
virtual void updateMarketCount()=0;//pure virtual function
};
class Town : public Settlement
{
public:
virtual void updateMarketCount();
private:
int m_markets;
int m_industries;
};
class Village : public Settlement
{
public:
virtual void updateMarketCount();
private:
int m_markets;
};
このようにして、これらすべてのオブジェクトを一般的な決済ポインターに割り当てることができます。例えば:
std::shared_ptr<Settlement> mysettlementPtr(new Town());//C++ 11 only. Found in memory header
Settlement* mysettlementPtr = new Town();//C++ < 11
ベクトルを実行する方法は次のとおりです。
std::vector<std::shared_ptr<Settlement>> mySettlements;
mySettlements.push_back(std::shared_ptr<Town>(new Town()));
mySettlements.push_back(std::shared_ptr<Village>(new Village()));
これは非常に単純な作業例です。
決済.h:
#pragma once
class Settlement
{
public:
virtual void increaseMarkets()=0;
virtual int getMarketCount()=0;
};
Town.h
#pragma once
#include "Settlement.h"
class Town : public Settlement
{
public:
Town():m_markets(0){}
virtual void increaseMarkets(){++m_markets;}
virtual int getMarketCount(){return m_markets;}
private:
int m_markets;
int m_industries;
};
村.h
#pragma once
#include "Settlement.h"
class Village : public Settlement
{
public:
virtual void increaseMarkets(){++m_markets;}
virtual int getMarketCount(){return m_markets;}
private:
int m_markets;
};
シンプルな例.cpp:
#include<iostream>
#include<memory>
#include "Settlement.h"
#include "Village.h"
#include "Town.h"
int main()
{
std::shared_ptr<Settlement> mysettlement(new Town());
std::cout << "I HAVE: " << mysettlement->getMarketCount() << " MARKETS" << std::endl;
mysettlement->increaseMarkets();
std::cout << "NOW I HAVE " << mysettlement->getMarketCount() << " MARKETS" << std::endl;
std::cout << "PRESS ENTER TO CONTINUE." << std::endl;
system("pause");
return 0;
}
注:ヘッダーに関連する .cpp ファイルに関数を抽出することをお勧めします。