基底クラスを用いて一度に処理を行う方法
Posted: 2014年2月10日(月) 20:36
検索キーワードが分からないため、こちらで質問させていただきます。タイトル正しいか怪しいですが...
とりあえず以下にソースコードを示します。
main.cpp
base.h
base.cpp
今回やりたいことは、pen.write();pencil.write();とふたつに分けて処理を行うところを、Baseクラスを用いてfor文で処理することです。
とりあえず、上記のコードで実行したところ、抽象クラスをインスタンス化できませんと出ました。
当然な結果と思うのですが、こんなことできるよという話をどこかで読んだような気がするので...
このような聞き方しかできないのが何とももどかしいですが、どうすればよいのでしょうか、よろしくお願いします。
丸投げな聞き方ですが、何かキーワードだけでも教えていただければ幸いです。
そもそもこれは実現可能なのでしょうか...
とりあえず以下にソースコードを示します。
main.cpp
#include <list>
#include"base.h"
using namespace std;
int main(){
list<Base> base;
Pen pen;
Pencil pencil;
base.push_back(pen);
base.push_back(pencil);
for(list<Base>::iterator it = base.begin();it != base.end();it++){
it->write();
}
return 0;
}
class Base{
public:
virtual void write()=0;
};
class Pen : public Base{
public:
void write();
};
class Pencil : public Base{
public:
void write();
};
#include "base.h"
#include <iostream>
using namespace std;
void Pen::write(){
cout << "Pen" << endl;
}
void Pencil::write(){
cout << "Pencil" << endl;
}
とりあえず、上記のコードで実行したところ、抽象クラスをインスタンス化できませんと出ました。
当然な結果と思うのですが、こんなことできるよという話をどこかで読んだような気がするので...
このような聞き方しかできないのが何とももどかしいですが、どうすればよいのでしょうか、よろしくお願いします。
丸投げな聞き方ですが、何かキーワードだけでも教えていただければ幸いです。
そもそもこれは実現可能なのでしょうか...