えぴ流 C++ 実装スタイル プロ生勉強会 第10回@品川 #pronamaよりプログラムをそのまま移しました。
CODE:
#include
#include
#include
#include
#include
using namespace std;
class pet {
string name_;
protected:
string name() const { return name_; }
virtual void do_make_sound() const = 0;
public:
pet(const char* name) : name_(name) {}
virtual ~pet() { cout > pets;
vector> cats;
cats.push_back(make_shared("タマ"));
cats.push_back(make_shared("ミケ"));
cats.push_back(make_shared("Kitty"));
for_each(cats.begin(), cats.end(), [](shared_ptr pet) {pet->make_sound(); });
{
vector> dogs;
dogs.push_back(make_shared("ポチ"));
dogs.push_back(make_shared("コロ"));
dogs.push_back(make_shared("Lassie"));
for_each(dogs.begin(), dogs.end(), [](shared_ptr pet) {pet->make_sound(); });
pets.push_back(cats[0]);
pets.push_back(dogs[0]);
pets.push_back(cats[1]);
pets.push_back(dogs[1]);
}
for_each(pets.begin(), pets.end(), [](shared_ptr pet) { pet->make_sound(); });
cout << "That's it." << endl;
}
実行結果は以下のとおりです。
CODE:
タマ: にゃんにゃんおー
ミケ: にゃんにゃんおー
Kitty: にゃんにゃんおー
ポチ: わんわんおー
コロ: わんわんおー
Lassie: わんわんおー
Lassie dctor.
タマ: にゃんにゃんおー
ポチ: わんわんおー
ミケ: にゃんにゃんおー
コロ: わんわんおー
That's it.
Kitty dctor.
タマ dctor.
ポチ dctor.
ミケ dctor.
コロ dctor.
ideone.com上の実行でも同じ結果になりました。